Невозможно использовать библиотеку DLL в BorlandC ++ 4.52 - PullRequest
0 голосов
/ 23 февраля 2012

У меня довольно раздражающая проблема. Моя среда - 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.

Что мне теперь делать?

...