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

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

我必须支持使用旧 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,但有许多遗留功能将使该项目成为一项重大任务!我正在寻找一个快速补丁来让它存活更长时间:)

史蒂夫

最佳答案

使用 Visual C++ 编写一个 DLL,将其接口(interface)公开为 Windows STDCALL C 函数。 Windows API 函数以类似方式完成。您在界面中公开的那些功能将执行您需要在程序中替换的功能。在 DLL 中,放弃调用新的 MS VC++ 库。

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

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();

关于c++ - 在旧的 Borland C 中使用 Visual C++ DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599357/

相关文章:

c++ - 将 UART 寄存器 UDR0 与无符号字符数组进行比较

c - 我的代码中的循环哪里出错了?

visual-c++ - 无法打开包含文件 config.h

c - 如何在 C 中连接字符串?

c - 为什么要显式调用 stat64?

c++ - 如何让VS变得便携

c++ - 使用 gdb 在 MS VC++ 2010 Express 中编译的调试程序

c++ - boost 图库图形构建;迭代添加边缘属性

c++ - Visual C++ 没有智能感知,我如何查看类/命名空间/库中的内容?

c++ - 基于 CMake 的 CUDA 应用程序构建失败 - 没有文件传递给链接器