[英]Calling C++ function from C without using extern “C”
是否可以从C代码中调用C ++ DLL中的函数? 该函数未声明为extern "C"
。 一个丑陋的平台依赖黑客,只适用于Visual Studio是好的。
调用约定不应该是一个主要问题,但我如何处理名称修改。 例如,对于Visual Studio,带有签名void f()
的C ++函数具有错位名称?f@@YAXXZ
并且它不是合法的C标识符。
(你不需要告诉我,我应该将C ++函数声明为extern "C"
。我已经知道了。但是我遇到了无法更改C ++代码的情况。)
将冒犯函数包装在另一个C ++函数中,并使用extern "C"
声明它。 无需为它创建特殊的DLL,只需在项目中包含一个C ++文件即可。
要使编译器静态链接具有不同导出名称的函数可能会很棘手。 但您始终可以使用LoadLibrary
加载DLL,然后使用GetProcAddress
。
你可以调查一下
LoadLibrary("path to dll");
加载DLL和
GetProcAddress("?f@@YAXXZ");
获取一个指向外部声明函数的函数指针。
除了创建一个用C ++编写的额外dll并通过extern“C”公开所有接口之外,我没有看到任何干净的解决方案。
您可以使用他们使用的相同C ++编译器编译您的C代码,然后您的C函数将使用相同的机制进行损坏,一切都将无缝链接,没有人会注意到任何差异。
如果必须使用其他编译器,则必须使用LoadLibrary手动加载dll,并使用GetProcAddress手动加载每个函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.