__FUNCDNAME__返回了错误的修饰函数名称

时间:2019-04-05 14:44:12

标签: c++ macros clr dllexport name-decoration

功能签名为:

void __stdcall Test(char *,int)
函数中使用的

__FUNCDNAME__宏返回修饰的函数名称:

    图像中的
  • 真实函数名称:?Test @@ YGXPADH @ Z
  • __ FUNCDNAME__返回:?Test @@ YGXPADH @ Z

启用/clr选项(“项目”>“属性”>“常规”>“公共语言运行时支持” // clr)时,__ FUNCDNAME__宏不会返回实际修饰的函数名称:

    图像中的
  • 真实函数名称:?Test @@ YGXPADH @ Z
  • __ FUNCDNAME__返回:?Test @@ $$ F YGXPADH @ Z __FUNCDNAME__宏不返回实际修饰的函数名称。

这使得无法使用 #pragma注释指令从代码中没有修饰名称的直接从DLL中直接导出DLL的功能:

// .h
/*__declspec(dllexport)*/ void __stdcall Test(char *p1, int p2);

// .cpp
void __stdcall Test(char *p1, int p2)
{
    #pragma message("Exporting function " __FUNCTION__ " [" __FUNCDNAME__ "]")
    #pragma comment(linker, "/EXPORT:" __FUNCTION__ "=" __FUNCDNAME__)
}

返回链接器错误LNK1242'?Test @@ $$ FYGXPADH @ Z'是无效的导出符号名称。

0 个答案:

没有答案