为什么 GetProcAddress(HINSTANCE,LPCSTR) 的第二个参数不能标识函数名称?为什么添加了一些("_Z6 * v")更多?



/*这是从http://www.cplusplus.com/articles/48tbqmol/复制的代码的一部分。*/

//在 *.dll源代码中声明的函数。

DLLAPI std::unique_ptr<Base> getObj(void);
DLLAPI std::string getName(void);

//从已加载库(命名为temp)导入功能的代码。 什么是" _z6"," v"在" _z6getObjv"中?

typedef std::unique_ptr<Base> (__cdecl *ObjProc)(void);
typedef std::string (__cdecl *NameProc)(void);
ObjProc objFunc = (ObjProc)GetProcAddress(temp, "_Z6getObjv");
NameProc nameFunc = (NameProc)GetProcAddress(temp, "_Z7getNamev");

如何命名导出功能是针对编译器的,请参阅名称杂交以获取更多信息。(_Z*可能是GCC V3 )

如果要构建某种插件系统,则应具有带有固定功能名称的公共ABI。您可以使用.def文件来控制导出的名称。

使用Microsoft C/C 工具链,您也可以用EXTERN_C __declspec(dllexport) int __cdecl MyFunc(long parm1) { return 0; }

导出一个未直的名称

使用依赖性步行者查看您的功能实际导出为。

最新更新