先说出错原因: 堆栈调用顺序
解决办法: 使用 __stdcall 或 使用C#属性 CallingConvention
起因是我想在c#中调用c函数结果出错了
如下
C 头文件
#define DLLExport extern "C" __declspec(dllexport) DLLExport int func(int a, int b); DLLExport void init();
C#
[DllImport("func.dll")] public static extern int func(int a, int b); [DllImport("func.dll")] public static extern void init();
调用时总是发生错误,只有init调用时不会出错,在搜索了很久之后我在C函数上加了一个 __stdcall 描述符,即堆栈调用顺序的改变,
PS:非托管dll使用的是stdcall,详见官方文档
就可以正常调用了