|
|
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Помогите. Замучился. BCB6 У меня есть библиотека от стороннего разработчика. Я хочу подключить ее неявно. Сделал implib bibl.dll bibl.lib и подключил ее к своему проекту Project->Add to project. Что мне сделать дальше что бы вызвать функцию bool myFunc(int, AnsiString) из этой dll? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 11:47 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
дед Макарimplib bibl.dll bibl.lib и подключил ее к своему проекту Project->Add to project. Что мне сделать дальше что бы вызвать функцию bool myFunc(int, AnsiString) из этой dll?описать функции соответствующим образом, в справке есть примеры. поиск по слову dllimport Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:01 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
дед МакарПомогите. Замучился. BCB6 У меня есть библиотека от стороннего разработчика. Я хочу подключить ее неявно. Сделал implib bibl.dll bibl.lib и подключил ее к своему проекту Project->Add to project. Что мне сделать дальше что бы вызвать функцию bool myFunc(int, AnsiString) из этой dll? Здесь про классы. Но то же проходит для функций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:04 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
пишу __declspec(dllimport) bool myFunc(int, AnsiString); и получаю Linker error Unresolved external 'myFunc(int, AnsiString)' referenced from UNIT1.OBJ хелп. что не так? Справка почему-то не помогла ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:12 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
может надо extern "C" ? ты посмотри, как в ДЛЛ функции называются, там всякие префиксы могут быть ... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:15 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Есть такая примочка bindump.exe называется. Ее поюзай с dll. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:17 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
читаю из http://www.codenet.ru/progr/visualc/Using-DLL.php ========================== Приведем теперь исходный код простого приложения, которое использует функцию MyFunction из библиотеки MyDLL.dll: #include <windows.h> #include "MyDLL.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int iCode=MyFunction("Hello"); return 0; } =========================== у себя пишу Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. получаю [Linker Error] Unresolved external '_myFunc' referenced from D:\CVSHOME\TEST\UNIT1.OBJ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:19 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
_БалтикаЕсть такая примочка bindump.exe называется. Ее поюзай с dll. нету в билдере такого :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:20 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Карабас Барабасможет надо extern "C" ? ты посмотри, как в ДЛЛ функции называются, там всякие префиксы могут быть ... Posted via ActualForum NNTP Server 1.3 extern "C" где? у меня? А куда его запихнуть? Функция так и называется. Она и в хидере так описана, и в описании длл-ки.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:22 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Карабас имел ввиду __declspec(dllimport) extern "C" bool myFunc(int, AnsiString); В библиотеках вместо действительных иногда используются так называемые декоративные имена. Что-то типа _MyFyncUSXYZ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:29 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
_БалтикаКарабас имел ввиду __declspec(dllimport) extern "C" bool myFunc(int, AnsiString); [C++ Error] Unit1.cpp(14): E2040 Declaration terminated incorrectly ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:34 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
дед Макар _БалтикаКарабас имел ввиду __declspec(dllimport) extern "C" bool myFunc(int, AnsiString); [C++ Error] Unit1.cpp(14): E2040 Declaration terminated incorrectly Извиняюсь, наоборот: extern "C" __declspec(dllimport) bool myFunc(int, AnsiString); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:39 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
вот пример: extern "C" char* __declspec(dllexport) DateStr(int *Hours); в твоем случае будет (скорее всего) что-то типа: extern "C" char* __declspec(dllimport) DateStr(int *Hours); в некоторых случаях к имени функции компилятором добавляются префиксы, обозначающие типы входных параметров, тип вызова ну и т.п. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:41 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Карабас Барабасвот пример: extern "C" char* __declspec(dllexport) DateStr(int *Hours); в твоем случае будет (скорее всего) что-то типа: extern "C" char* __declspec(dllimport) DateStr(int *Hours); в некоторых случаях к имени функции компилятором добавляются префиксы, обозначающие типы входных параметров, тип вызова ну и т.п. Posted via ActualForum NNTP Server 1.3Возвращаемый тип все-таки после __declspec(dllimport) писать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:45 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
_БалтикаВозвращаемый тип все-таки после __declspec(dllimport) писать надо.да ? может быть :)) компилируется и ладно :) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:47 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
_Балтика дед Макар _БалтикаКарабас имел ввиду __declspec(dllimport) extern "C" bool myFunc(int, AnsiString); [C++ Error] Unit1.cpp(14): E2040 Declaration terminated incorrectly Извиняюсь, наоборот: extern "C" __declspec(dllimport) bool myFunc(int, AnsiString); Если с подключенным ихним хидером, то [C++ Error] Unit1.cpp(18): E2337 Only one of a set of overloaded functions can be "C" если без него то Unresolved... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:48 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
дед МакарЕсли с подключенным ихним хидером,дак есть их хедер ? тогда ничего мутить не надо, просто надо его подключать, там всё должно быть описано как надо дед Макар[C++ Error] Unit1.cpp(18): E2337 Only one of a set of overloaded functions can be "C"а если ткнуть на ошибку и нажать F1, что написано ? (я не встречался с такой ошибкой) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:51 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Должна быть все таки какая-то утилита типа dumpbin.exe и в Борланде. Если нет, то можно поэксперементировать с LoadLibrary и GetProcAddress что бы докопаться до имени ф-ции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:51 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Как она в хедере описана? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:55 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Объявлена вернее :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:56 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
_Балтикаdumpbin.exeА что она делает ? Если показывает список экспортируемых функций, то такого добра в инете навалом, думаю, если автор поищет то найдет или ее же, или другую аналогичную Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 12:58 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас _Балтикаdumpbin.exeА что она делает ? Если показывает список экспортируемых функций, то такого добра в инете навалом, думаю, если автор поищет то найдет или ее же, или другую аналогичную Posted via ActualForum NNTP Server 1.3Дык и я про тоже. А она много всего делает, в зависимости от ключей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 13:00 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
_Балтикаdumpbin.exeкстати, уточни, про какой именно файл ты говришь: bindump.exe или dumpbin.exe ? гугль по обеим ссылки выдает :)) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 13:04 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Карабас Барабас _Балтикаdumpbin.exeкстати, уточни, про какой именно файл ты говришь: bindump.exe или dumpbin.exe ? гугль по обеим ссылки выдает :)) Posted via ActualForum NNTP Server 1.3dumpbin.exe ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 13:08 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
_Балтика Карабас Барабас _Балтикаdumpbin.exeкстати, уточни, про какой именно файл ты говришь: bindump.exe или dumpbin.exe ? гугль по обеим ссылки выдает :)) Posted via ActualForum NNTP Server 1.3dumpbin.exeНо он без link.exe и еще какой-то dll (по-моему mspdb71.dll) работать не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 13:10 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
_БалтикаДолжна быть все таки какая-то утилита типа dumpbin.exe и в Борланде. Если нет, то можно поэксперементировать с LoadLibrary и GetProcAddress что бы докопаться до имени ф-ции. Через GetProcAddress я ее достаю :) А хочется неявно.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 13:15 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
дед МакарА хочется неявно....забей, раз хедер неподходит :) ну можно еще повертеть опции компилятора ... Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 13:16 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Мона все-таки обяву ф-ции в студию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 13:18 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
_БалтикаМона все-таки обяву ф-ции в студию? BASS_Init - это то что я называл myFunc :) #define BASSDEF(f) (WINAPI *f) // define the functions as pointers #ifdef WIN32 BOOL BASSDEF(BASS_Init)(int device, DWORD freq, DWORD flags, HWND win, const GUID *dsguid); #else BOOL BASSDEF(BASS_Init)(int device, DWORD freq, DWORD flags, void *win, void *dsguid); #endif ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 13:30 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Что нам скажут твои BASSDEF ??? приведи описание Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 13:32 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Карабас БарабасЧто нам скажут твои BASSDEF ??? приведи описание Posted via ActualForum NNTP Server 1.3 ну как же, я же написал выше: #define BASSDEF(f) (WINAPI *f) // define the functions as pointers ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 13:34 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
дед Макар#define BASSDEF(f) (WINAPI *f) // define the functions as pointersтьфу :)) куда я смотрел ?:)) Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 13:35 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
В общем ситуация такая. Еслия делаю явно то у меня все работает Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Как мне это все провернуть неявно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 13:42 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
То есть так значит: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 14:07 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
_БалтикаТо есть так значит: Код: plaintext 1. опять? :) Я ж писал выше в тексте #define BASSDEF(f) (WINAPI *f) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 14:21 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
дед Макар опять? :) Я ж писал выше в тексте #define BASSDEF(f) (WINAPI *f) Я имел ввиду при импорте __declspec(dllimport) BOOL WINAPI ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 14:36 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
_Балтика дед Макар опять? :) Я ж писал выше в тексте #define BASSDEF(f) (WINAPI *f) Я имел ввиду при импорте __declspec(dllimport) BOOL WINAPI ... А... когда неявно пытаюсь? Конечно же есть. и получаю unresolved... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 14:40 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Если хедер не подходит, обратись к разработчикам Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 14:43 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
если я загружаю ее явно - то он очень даже подходит.... Или есть какие-то нюансы при создании dll для подключения ее явно/неявно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 14:48 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
Это 100% говорит о том, что компилятор подставляет в имена функций свои служебные символы. Покрути настройки компилятора Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 14:49 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
сделай вот так: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2006, 19:46 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
White Owlсделай вот так: Код: plaintext 1. 2. 3. 4. 5. 6. Unresolved external..... Может я че не так делаю изначально? Может кто нибудь объяснить по шагам этапы неявного подключения сторонней библиотеки(начиная с "запустить билдер" и заканчивая "нажать F9") ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2006, 19:39 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
1) возьми любую утилиту показывающую имена экспортируемых функций. Например depends.exe из состава VC или соотвествующий плагин к Фару. Посмотри как выглядят имена экспортируемых функций. Или даже impdef который есть и в BC, но с ним сложнее, надо уметь читать def файлы тогда :) 2) Если имена выглядит как "SomeFunction" то используй implib /a my.lib my.dll Если "_SomeFunction", то implib my.lib my.dll 3) В заголовочном файле должно быть описание функции такого вида: int SomeFunction(int x, int y, char *s); этого хватает! При большом желании можно добавлять всяческие extern или __declspec(dllimport), но на самом деле они для BC не нужны. 4) В списке линковки указываешь my.lib как обычную библиотеку и все. 5) Если пишешь на С++, то не забудь имена импортируемых функций в заголовке указать как С. Для этого, либо каждую функцию помечаешь как extern "C" (синтаксис тебе уже показывали), либо все функции разом: Код: plaintext 1. 2. 3. 4. Никаких def файлов тебе не нужно, никаких declspec(dllimport) тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2006, 19:44 |
|
||
|
Вызов функции из DLL
|
|||
|---|---|---|---|
|
#18+
А можно привести алгоритм для VC++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2006, 13:47 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2031891]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 407ms |

| 0 / 0 |
