在旧的Borland C中使用Visual C ++ DLL?

我必须使用旧的Borland编译器(BC 5)支持用C编写的旧应用程序。

不幸的是,我们使用的旧TCP / IP库开始显示它的年龄,并且遇到了Vista和Win7机器的问题。

我有一个新的MS Visual C ++函数库,我想用它来制作一个可以从Borland C调用的DLL。

所以,我有两个问题:1)如何使一个Visual C ++ DLL可以从Borland C程序调用,2)如果它是可调用的,如何从普通的旧C调用C ++函数?

理想情况下,整个项目应该转换为Visual C,但是有许多遗留function可以使该项目成为一项重大任务! 我正在寻找一个快速补丁来让它保持活力一段时间:)

史蒂夫

使用Visual C ++编写DLL,将其接口公开为Windows STDCALL C函数。 Windows API函数类似地完成。 您在界面中公开的那些function将执行您在程序中替换所需的function。 在DLL内部,放弃调用新的MS VC ++库。

因此,要获得一个可从C调用并使用STDCALL堆栈协议的函数,请执行以下操作:

extern "C" int __stdcall foo();

您还必须添加信息以从DLL导出函数。 您可以在声明中明确地这样做:

extern "C" __declspec(dllexport) int __stdcall foo();

但是你需要一个单独的头文件用于你的BorlandC代码(它可能有不同的语法来指定DLL导入部分和STDCALL部分)。 在Visual C ++中,您在客户端中使用的声明类似于:

extern "C" __declspec(dllimport) int __stdcall foo();

您可以使用Borland的IMPLIB实用程序创建Borland OMF导入库:IMPLIB -a“whatever.omf”“whatever.dll”,其中DLL文件是由MSVC创建的。

-a选项用于Microsoft兼容性。 生成的OMF(Borland的导入库文件格式),结合指定导出函数及其调用约定的头文件应该有效…(我相信IMPLIB在C ++ Builder 5中存在。)

http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devwin32/implib_xml.html