用C++写了一个动态库,返回一个结构体,结构体如下:
typedef struct
{
unsigned long Width;
void* pixelData;
char* modality;
}rreadData;
在用C#调用时,用如下结构体接收:
public struct readData
{
public UInt32 Width;
public IntPtr pixelData;
public string modality;
};
总是报错:方法的类型签名与 PInvoke 不兼容。
试了好多方法,都不行,最后看到有网友说用IntPtr代替string,于是将C#结构体改成如下:
public struct readData
{
public UInt32 Width;
public IntPtr pixelData;
public IntPtr modality;
};
这样就不报错了,可是这样在结构体中就没有获取需要的值,再经过如下转换即可:
string modality = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(readData.modality);
记录下来,希望能帮到遇到同样问题的人。