我在 dll 及其头文件中有一个库,我没有它的源代码。我需要使用 pinvoke 从 C# 调用此非托管代码,但在设置调用约定时遇到问题。头文件看起来像:
#ifdef EVOLIB_EXPORTS
#define EVOLIB_API __declspec(dllexport)
#else
#define EVOLIB_API __declspec(dllimport)
#endif
extern EVOLIB_API int ConvertRVBtoK(char *FileNameIn, char *FileNameOut,int ColorSmooth,int BlackMode);
我认为 ConvertRVBtoK 调用约定必须是__cdecl
因为那是默认的 c/c++ 调用约定。但是,当我使用 undname.exe 实用程序检查修饰名称 ("?ConvertRVBtoK@@YGHPAEJJJ0E@Z") 时,结果显示__stdcall
为调用约定。为什么?dll文件和头文件有冲突吗?