У меня довольно раздражающая проблема.
Моя среда - Borland C ++ 4.52 IDE в Windows, с 16-битным ориентированным кодом.
Мне нужно вызвать одну функцию из библиотеки, которой я не владею (и, таким образом, у меня нет возможности искать ее источник).
Я сделал это внутри моего cpp файла:
extern "C" __declspec(dllimport) unsigned long foo(unsigned long, unsigned short, unsigned short); //Line 13
//...
int otherFunc(int param) //Line 19
{
...
foo - это функция в Foo.dll
Я хочу использовать это так:
unsigned long result;
result = foo(unsignedlongnumber, unsignedshortnumber, unsignedshortnumber2);
Но при компиляции у меня появляется 1 предупреждение и 3 ошибки:
Warning xxx.cpp 13: Style of function definition is now obsolete
Error xxx.cpp 13: 'foo' is not a parameter
Error xxx.cpp 19: 'otherFunc' is not a parameter
Error xxx.cpp 19: , expected
Я искал и обнаружил, что вам нужно сообщить Borland "что делать" с помощью файла библиотеки ссылок .lib, полученного из implib с вашей DLL. Моя проблема сейчас в том, что:
C:\CAD\PROJECT\ZDK_5>IMPLIB Foo Foo.dll
Turbo Implib Version 2.0 Copyright (c) 1991, 1994 Borland International
Exception C0000005: Access violation
Module: IMPLIB.EXE Start address: 00410000
EAX=6CE2B500 EBX=008F1158 ECX=FFFFFFFF EDX=008F1AB2 ESI=008F131C
EDI=6CE2B5D3 EIP=00416757 EBP=0012FE0C ESP=0012FE08 EFL=00010246
Я пытался IMPLIB -o Foo Foo.dll
и IMPLIB -o Foo.lib Foo.dll
безуспешно ...
Проект, используемый для вызова функции dll с LoadLibraryEx32W
, GetProcAddress32W
и CallProcEx32W
, но возвращение последнего не похоже на то, что ожидается от foo
.
Что мне теперь делать?