无法在BorlandC++4.52中使用DLL(也无法实现)

无法在BorlandC++4.52中使用DLL(也无法实现),c++,borland-c++,C++,Borland C++,我有一个很烦人的问题。 我的环境是Windows上的Borland C++ 4.52 IDE,16位代码。 我必须从我不拥有的DLL调用一个函数,因此我没有办法查找它的源代码 我在我的cpp文件中这样做: extern "C" __declspec(dllimport) unsigned long foo(unsigned long, unsigned short, unsigned short); //Line 13 //... int otherFunc(int param) //Lin

我有一个很烦人的问题。 我的环境是Windows上的Borland C++ 4.52 IDE,16位代码。 我必须从我不拥有的DLL调用一个函数,因此我没有办法查找它的源代码

我在我的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如何处理从implib获得的带有DLL的.lib链接库文件。我现在的问题是:

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.dll和IMPLIB-o Foo.lib Foo.dll,但没有成功

该项目用于使用LoadLibraryEx32W、GetProcAddress32W和CallProcEx32W调用dll函数,但后者的返回似乎与foo预期的返回不符


我现在能做什么?

您确定,您的编译器支持外部C和u declspecdlimport扩展吗?不,我不是:。。。我还尝试使用impdef从DLL生成.def文件,但我有相同的访问冲突错误…您可以尝试使用较新版本的implib/impdef,甚至可以手动编写def文件。但在GeneralMPLIB中,从16位代码轻松调用32位函数的可能性对我来说似乎是可疑的,只有将程序链接起来才重要。你还没走那么远。编译器很古老,我严重怀疑它是否支持dllimport。特别是因为这是一个32位的特性。很有可能DLL也是如此,这解释了implib失败的原因。联系DLL所有者并解决一些问题,但不要期望他愿意编写16位版本的DLL。或者允许您在没有许可证的情况下使用此DLL。是的,问题可能是由于32位对16位。我设法从CallProcEx32W获得了正确的返回值。事实上,使用旧版本的旧代码是用一个参数调用一个函数,但我的有3个,我只是没有用3而不是1将第一个参数更改为CallProcEx32W。。。doh。函数的堆栈是第一个参数之外的垃圾,它解释了为什么具有相同参数的两个调用没有返回相同的值:!