我正在尝试导出一个简单的测试函数用于与指定调用约定(fyi:mIRC)的应用程序配合使用的DLL。
int __stdcall test_func(HWND mWnd, HWND aWnd, char *data, char *parms, BOOL show, BOOL nopause)
现在,要从应用程序中调用这个函数,我会使用test_func,但由于名称修饰,我发现这并不像我想象的那样简单。通过在类似的主题上研究,我了解到,在模块定义(.def)中使用extern "C"与__declspec(dllexport)结合使用是一种去除名称修饰的(有点)等效方法。然而,在使用extern/dllexport方法时,我的函数(例如)总是_test_func@numbers,而.def移除了所有所需的名称修饰以供我导出到的应用程序使用。
请问为什么会这样?我对这两种方法很感兴趣,请解释一下,谢谢!