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

时间:2011-01-04 23:02:09

标签: c++ c visual-c++ dll turbo-c

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

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

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

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

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

史蒂夫

2 个答案:

答案 0 :(得分:6)

使用Visual C ++编写DLL,将其接口公开为Windows STDCALL C函数。 Windows API函数类似地完成。您在界面中公开的那些功能将执行您在程序中替换所需的功能。在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();

答案 1 :(得分:2)

您可以使用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