|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|
DLL 32 и 64 в C++ 201026.02.2013, 22:25. Показов 4273. Ответов 25
Метки нет (Все метки)
Написал простой dll, откомпилировал его в VC 2010 подключаю к матлабу, который ругается что dll создан 32 битным компилятором, а нужен 64 битный. Подскажите пожалуйста как в VC 2010 откомпилировать 64 битным компилятором? Какие нужны настройки?
У меня вин7 64 бита
0
|
|
| 26.02.2013, 22:25 | |
|
Ответы с готовыми решениями:
25
Visual C++ 2010 и Dll Visual C++ 2010 и msvcr100.dll Подключение dll в MSVS 2010 C++ |
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|
| 26.02.2013, 22:34 [ТС] | |
|
не нахожу где это
вот Tools->Options а дальше где?
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|
| 26.02.2013, 23:05 [ТС] | |
|
Не понимаю где именно надо менять 32 на 64, где и что конкретно менять или выбирать
0
|
|
|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
|
| 26.02.2013, 23:58 | |
|
tur9, вам до этого ещё ранова то будет , имхо конечно . Смотри - Active Solution Platform
Добавлено через 2 минуты а какие подводные камни ещё могут всплыть на 64 битной программе (DLL) вы себе даже не представляете !
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|
| 27.02.2013, 16:21 [ТС] | |
|
Вот сделал
Правильно? Игорь с++, вы меня просто убиваете, даже не знаю как теперь быть. У меня программа на матлабе некоторые функции долго выполняет, мне как воздух длли нужны и что теперь делать? Можете помогать мне на каких-нибудь условиях? Добавлено через 41 минуту уже первые ласточки: компиляция не проходит: error lnk1104 cannot open file 'kernel32.lib' Нашел вот этот либ "C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64\Kernel32.Lib" куда его надо подключить или скопировать? пока все мои попытки безуспешны Добавлено через 12 часов 26 минут Удалось скомпилировать и получить длл 64. Положил в одну папку полученные длл, либ и h. Перешел в матлабе в эту папку, вызываю loadlibrary('targ1','targ1.h') и получаю ошибку Error using loadlibrary (line 419) There was an error loading the library "D:\Prog\C\Console\DLL\LIBS\targ1.dl l" D:\Prog\C\Console\DLL\LIBS\targ1.dll is not a valid Win32 application. Что это все значит? Что новый dll все еще 32, а не 64? Интересно, что lib 32 по размеру неотличим от 64, а dll 64 чуть-чуть больше чем dll 32 Добавлено через 1 час 37 минут Вот исходник с указанием платформы х64 А вот длл (в тотале и эксплорере, разницы нет) Добавлено через 5 минут А это при 32 компиляции Добавлено через 14 минут ошибся, длл и либ брал не оттуда. Надо отсюда брать D:\Prog\C\Console\DLL\soltarg1\x64\Debug \ 1>------ Rebuild All started: Project: targ1, Configuration: Debug x64 ------ 1> stdafx.cpp 1> dllmain.cpp 1> targ1.cpp 1> Creating library D:\Prog\C\Console\DLL\soltarg1\x64\Debug \targ1.lib and object D:\Prog\C\Console\DLL\soltarg1\x64\Debug \targ1.exp 1> targ1.vcxproj -> D:\Prog\C\Console\DLL\soltarg1\x64\Debug \targ1.dll 1> Creating library D:\Prog\C\Console\DLL\soltarg1\x64\Debug \targ1.lib and object D:\Prog\C\Console\DLL\soltarg1\x64\Debug \targ1.exp 1> targ1.vcxproj -> D:\Prog\C\Console\DLL\soltarg1\x64\Debug \targ1.dll ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ========== Добавлено через 39 минут После вызова из матлаба правильных 64 битных длл получил другую ошибку loadlibrary('targ1','targ1.h') Warning: The function 'LetterList' was not found in the library > In loadlibrary at 403 Warning: The function 'PutInt' was not found in the library > In loadlibrary at 403 Warning: The function 'sum2num' was not found in the library > In loadlibrary at 403 Странно, имена функций из 'targ1.h' видит, реализации функций в 'targ1.срр' нет
0
|
|
|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
|
| 27.02.2013, 17:04 | |
|
во первых что бы посмотреть битность надо нажать f3 а во вторых такой вопрос - ты когда нибудь пробовал подключать динамически свою длл к своей программе?
Добавлено через 3 минуты так же советую тебе через тотал командер посмотреть список импортируемых функций ,100% она называется не так как ты писал
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|||||||||||
| 27.02.2013, 18:11 [ТС] | |||||||||||
|
вот F3 слева при фокусе на левом targ1.dll (32 бита), справа - на правом targ1.dll (64 бита)
видно, что файлы разные, но где внутри видна битность? вот F3 на файл targ1.h
Вот код вызова
Поставил в программу вызова вместо вызываемого длл32 и либ32, соответственно длл64 и либ64, но тип компиляции оставил вин32, получил ожидаемую ошибку targ1.lib(targ1.dll) : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86' это тот редкий случай когда ошибка радует но при смене режима компиляции на х64 получаю все ту же ошибку >LINK : fatal error LNK1104: cannot open file 'kernel32.lib' Добавлено через 9 минут длл я писал как сказано здесь http://life-prog.ru/view_zam.p... t=2&page=3 просто добавил еще одну функцию sum2num Интересно, что подключение длл производится выставлением пути к файлу .lib, о длл ни слова Добавлено через 3 минуты Неясно как выполнить, добавить kernel32.lib, как сказано последней строчкой картинки Specifiles additional items to add to the link command line [i.e. kernel32.lib]
0
|
|||||||||||
|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
|
| 27.02.2013, 18:31 | |
|
вот смотри в архиве проект для длл и проект который динамически использует её , и ещё картинка для тотала которая показывает список функций
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|
| 27.02.2013, 18:44 [ТС] | |
|
сделал так: Project->Properties->VC++ Directories->Library Directories
добавил путь "C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64" компиляция прошла, но при запуске программы вызова длл64 получаю сообщение
0
|
|
|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
|
| 27.02.2013, 18:51 | |
|
а вот и картинка про битность в тотале
0
|
|
|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
|
| 27.02.2013, 18:52 | |
|
tur9, dll рядом положил ?
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|
| 27.02.2013, 20:27 [ТС] | |
|
вот-вот РЯДОМ, куда рядом? раньше клал, а теперь голова кругом
не рядом сейчас, а добавил путь Linker->Input->Additional Dependencies D:\Prog\C\Console\DLL\soltarg1\x64\Debug наверное здесь проблема, надо взять длл и либ из проекта по созданию длл и положить его в папку проекта вызова длл, но куда там именно его, их положить? твое все заработало когда добавил Project->Properties->VC++ Directories->Library Directories добавил путь "C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64" еще там буду разбираться почему заработало а мой код длл ты не смог бы откомпилировать? Извини за нахальство, тернистый путь Добавлено через 2 минуты сейчас при вызове моего длл такая ошибка 1>LINK : fatal error LNK1104: cannot open file 'D:\Prog\C\Console\DLL\soltarg1\x64\Debu g.obj' интересно, что такого файла Debug.obj у меня вообще нет нигде Добавлено через 23 минуты Твоя программа производит длл этот Prog & DLL\MyDll\x64\Release\MyDll.dll размером 116736 байт, а при вызове длл вызывается другой длл с тем же именем Prog & DLL\Prog\x64\Release\MyDll.dll размером 119808 байт откуда он? Добавлено через 8 минут не понял как вызывать битность в тотале, F3 дает результат, который я показал в сообщении 8 на предыдущей странице. Может у меня не тот тотал? Да, не тот, сейчас тот установлю
0
|
|
|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
|
| 27.02.2013, 21:43 | |
|
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|||||||||||||||||||||
| 27.02.2013, 22:23 [ТС] | |||||||||||||||||||||
|
По умолчанию автоматом создается этот файл
Если не сложно объясни.
0
|
|||||||||||||||||||||
|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
|||
| 27.02.2013, 22:32 | |||
|
Добавлено через 1 минуту да и ещё ты её статичечки или динамически хочеш подключать ? Просто по коду это больше похоже на статическую Добавлено через 2 минуты Добавлено через 1 минуту ушёл на пол часа , приду посмотрю , а ты пока подумай над тем что я тебе сказал
0
|
|||
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
| 27.02.2013, 22:34 | |
|
еще есть альтернатива для подключения своего функционала и вроде даже более правильная:
мех-файлы. от необходимости правильной сборки она не избавляет, но может быть полезна: http://ru.wikipedia.org/wiki/M... 0.BB.D1.8B
0
|
|
|
45 / 6 / 1
Регистрация: 20.08.2012
Сообщений: 200
|
|
| 27.02.2013, 23:06 [ТС] | |
|
DU, спасибо за ссылку, правда маловато там чтобы понять.
Проблема у меня такая: программа на матлабе когда доходит до определенной функции поиска контуров на картинке, на матрице делает это медленно. Единственное решение я вижу вызвать тот же алгоритм, написанный на чем то быстром, на си например. Мне все равно dll или mex файлы. Я готов разбираться и с тем и с другим. Единственная моя проблема в том, чтобы понять как это делать. Ты знаешь как делать mex-файлы? - ЧТО ЭТО ТАКОЕ ? Ты экспортируеш длл в стиле с++ ? Зачем ? Там же имена будут искажены , экспорт делай в стиле "С" мне все равно в чем делать, скажешь в си - буду в си. Просто я пример нашел такой, вот и сделал. -да и ещё ты её статичечки или динамически хочеш подключать ? разве к матлабу можно статически? может mex-файлы это и есть статический способ подключения? я предполагал в начале подключать динамически, т.е. чтобы потом вызывать через loadlibrary. мне все равно как подключать лишь бы программа работала в конце. - поставь ту версию тотала какая и у меня , найди свою длл и нажми f3 так я поставил такую же как и у тебя версию 756а, но интерфейс совсем другой, как и у меня в восьмой версии. Не понимаю там как битность увидеть
0
|
|
|
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
|
|||
| 27.02.2013, 23:12 | |||
|
Сейчас посмотрю твой текст,далеко не убегай
0
|
|||
| 27.02.2013, 23:12 | |
|
Помогаю со студенческими работами здесь
20
Bass.dll в CodeGear 2010 libmysql.dll и Delphi 2010 Подключение .dll в Visual Studio 2010 Msvcr71.dll и Microsoft Visual C++ 2010 Создание DLL на Visual Studio 2010-12 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|