C# 通过dllimport 调用C++ dll
C++
typedef int RS;
typedef struct {
// SDK版本号, a.b.c.d形式
u_int8_t version[4];
// 描述
char desc[64];
} cl_lib_info_t;
CLIB_API RS cl_init(u_int32_t client_type, cl_lib_info_t *info);
C#对应
public struct cl_lib_info_t
{
// SDK版本号, a.b.c.d形式
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public byte[] version;
// 描述
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
public string desc;
}
[DllImport("clib.dll")]
public static extern int cl_init(uint client_type, out cl_lib_info_t info);
报这个
检测到 PInvokeStackImbalance Message: 对 PInvoke 函数“WindowsFormsApplication2!WindowsFormsApplication2.yinhesdk::cl_init”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
没使用过dllimport,请问我的类型应该怎么对应?
------解决方案--------------------有一个工具叫CLRInsideOut,用它可以将C++转换成对应的C#类型。
------解决方案--------------------u_int8_t version[4]; 改成 char
public byte[] version; 改成string
试试。有可能是定义的类型不对引起的。