从C调用C++函数而不使用extern"C"

Joh*_*åde 5 c c++ name-mangling visual-studio

是否可以从C代码中调用C++ DLL中的函数?该函数未声明extern "C".一个丑陋的平台依赖黑客,只适用于Visual Studio是好的.

调用约定不应该是一个主要问题,但我如何处理名称修改.例如,对于Visual Studio,带签名的C++函数具有void f()错位名称?f@@YAXXZ,并且不是合法的C标识符.

(你不需要告诉我,我应该将C++函数声明为extern "C".我已经知道了.但是我遇到了无法更改C++代码的情况.)

n. *_* m. 8

将冒犯函数包装在另一个C++函数中,并用它声明它extern "C".无需为它创建特殊的DLL,只需在项目中包含一个C++文件即可.


nul*_*ptr 4

要使编译器静态链接具有不同导出名称的函数可能很棘手。但您始终可以使用 加载 DLL LoadLibrary,然后使用GetProcAddress.