有没有办法来抑制C ++名字改编?
-
05-09-2019 - |
题
我有一个用C ++编写一个DLL,我想打压名字改编几个导出的方法。该方法是全局的,不属于任何类的成员。有没有一种方法来实现这一目标?
顺便说一句:我使用VS2008。
解决方案
“bradtgmurray”是正确的,但对于Visual C ++编译器,你需要明确反正导出功能。而利用提出了通过DEF文件“赛尔吉 - appTranslator”是错误的方式做到这一点。
什么是出口上的Visual C符号的普遍方式++?
使用declspec(DLLEXPORT / dllimport的)指令,其工作方式为C和C ++代码,装饰或不(然而,所述.DEF被限制为C除非你想装饰手工您的代码)。
因此,以正确的方式来导出在Visual C ++是组合所述出口“C”成语,由“bradtgmurray”作为回答未修饰的功能,和dllimport的/ DLLEXPORT关键字。
一个例子
作为一个例子,我上的Visual C ++一个空DLL项目创建,并写了两个函数,一个被称为CPP,因为它被装饰,而另一个C,因为它不是。该代码是:
// Exported header
#ifdef MY_DLL_EXPORTS
#define MY_DLL_API __declspec(dllexport)
#else
#define MY_DLL_API __declspec(dllimport)
#endif
// Decorated function export : ?myCppFunction@@YAHF@Z
MY_DLL_API int myCppFunction(short v) ;
// Undecorated function export : myCFunction
extern "C"
{
MY_DLL_API int myCFunction(short v) ;
} ;
我想你已经知道了,但为完整起见,在MY_DLL_API宏是,但不是由DLL用户在DLL生成文件(即VCPROJ)被定义。
在C ++代码很容易编写的,但为了完整性起见,我将它下面写:
// Decorated function code
MY_DLL_API int myCppFunction(short v)
{
return 42 * v ;
}
extern "C"
{
// Undecorated function code
MY_DLL_API int myCFunction(short v)
{
return 42 * v ;
}
} ;
其他提示
环绕与外部的 “C” 函数定义{}
extern "C" {
void foo() {}
}
请参阅 http://www.parashift.com /c++-faq-lite/mixing-c-and-cpp.html
可以使用.DEF文件与导出部分避免对导出的函数所有manglings(C ++,CDECL,STDCALL,...)。只要创建一个MYDLL.DEF文件并将其添加到您的项目:
LIBRARY "MyDLL"
EXPORTS
Foo
Bar
其实,机会是向导已经创建DEF文件为您服务。你只需要填写导出部分。
不隶属于 StackOverflow