C++动态库中导出函数结构体的引用在C#中对应 导入函数应该怎么写?
C++导出函数的原型为:DLL_EXPORTintWP_IPC_GetCameraInfo(intcameraId,CAMERAINFO&cameraInfo);我自己写...
C++导出函数的原型为:DLL_EXPORT int WP_IPC_GetCameraInfo(int cameraId, CAMERAINFO &cameraInfo);
我自己写的导出为:public static extern int WP_IPC_GetCameraInfo(int cameraId, ref CAMERAINFO cameraInfo);
但是在程序中调用该函数时,得到的结构体中数据总是不对,本来应该得到的整形数据,感觉有点像指针,求解
我写的结构体的声明如下:
[StructLayout(LayoutKind.Sequential)]
public struct CAMERAINFO
{
public int nEncodeType;
public int nHDWidth;
public int nHDHeight;
public int nCIFWidth;
public int nCIFHeight;
public int version;
} 展开
我自己写的导出为:public static extern int WP_IPC_GetCameraInfo(int cameraId, ref CAMERAINFO cameraInfo);
但是在程序中调用该函数时,得到的结构体中数据总是不对,本来应该得到的整形数据,感觉有点像指针,求解
我写的结构体的声明如下:
[StructLayout(LayoutKind.Sequential)]
public struct CAMERAINFO
{
public int nEncodeType;
public int nHDWidth;
public int nHDHeight;
public int nCIFWidth;
public int nCIFHeight;
public int version;
} 展开
1个回答
展开全部
[StructLayout(LayoutKind.Explicit)]
public struct CAMERAINFO
{
[FieldOffset(0)] public int nEncodeType;
[FieldOffset(4)] public int nHDWidth;
[FieldOffset(8)] public int nHDHeight;
[FieldOffset(12)] public int nCIFWidth;
[FieldOffset(16)] public int nCIFHeight;
[FieldOffset(20)] public int version;
}
[DllImport(……)]
public static extern int WP_IPC_GetCameraInfo(int cameraId, ref CAMERAINFO cameraInfo);
//调用
CAMERAINFO cameraInfo = new CAMERAINFO();
int ret = WP_IPC_GetCameraInfo(cameraId, ref cameraInfo);
追问
int本身就是4个字节 为什么要加这个呢?[FieldOffset(0)]
追答
防止C#编译器优化所造成成员对齐边界的“错位”。
对CAMERAINFO而言,所有成员恰巧是都是int(4字节),在32位系统可能(只是可能,但不能肯定)没问题;但对64位系统就很可能不正确了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询