【发布时间】:2018-08-13 10:23:21
【问题描述】:
我在 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文件和头文件有冲突吗?
【问题讨论】:
标签: c# pinvoke calling-convention stdcall cdecl