C#调用C++编写的dll指针的应用

时间:2022-08-31 09:15:08
C#调用一个dll,需要用到结构体指针。
如下  [DllImport("SLDWDTC.dll")]
    public unsafe static extern void getCameraMat(cameraPara leftCameraPara, cameraPara rightCameraPara, MCvMat* left_intrinsic_matrix, MCvMat* left_distortion_coeffs, MCvMat* right_intrinsic_matrix, MCvMat* right_distortion_coeffs);

用现在的调用可以生成一个IntPtr 
        IntPtr sp = Emgu.CV.CvInvoke.cvCreateMat(4, 1, Emgu.CV.CvEnum.MAT_DEPTH.CV_32F);
        MCvMat* left_distortion_coeffs = Emgu.CV.CvInvoke.cvCreateMat(4, 1, Emgu.CV.CvEnum.MAT_DEPTH.CV_32F);


怎样把IntPtr 转换成结构体MCvMat的指针进而调用getCameraMat方法?

6 个解决方案

#1


cvCreateMat 这个方法本身在 C# 这里处理的时候就应该定义成 返回 MCvMat 对象。然后 MCvMat struct / class 中字段变量的定义应该和 C++ 里面数据类型相吻合。

Emgu CV ...... 你在玩 C# 游戏编程?Emgu CV 应该有自己的文档的吧。

#2


引用 1 楼 youzelin 的回复:
cvCreateMat 这个方法本身在 C# 这里处理的时候就应该定义成 返回 MCvMat 对象。然后 MCvMat struct / class 中字段变量的定义应该和 C++ 里面数据类型相吻合。

Emgu CV ...... 你在玩 C# 游戏编程?Emgu CV 应该有自己的文档的吧。


是Emgu CV 我调用这个是因为dll的C++使用的是open cv。不是游戏编程,是图像处理算法。Emgu CV的cvCreateMat 方法生成的就是IntPtr  不知道怎么转成open cv的指针了。

#3


LZ 的意思是  把得到的IntPtr转为自己的结构体么?还是? C#调用C++编写的dll指针的应用

#4


是的。那个结构体是Emgu CV 定义的

#5


以前没有做过类似的调用,不知道怎么转成指针,我是用wpf做的界面。

#1


cvCreateMat 这个方法本身在 C# 这里处理的时候就应该定义成 返回 MCvMat 对象。然后 MCvMat struct / class 中字段变量的定义应该和 C++ 里面数据类型相吻合。

Emgu CV ...... 你在玩 C# 游戏编程?Emgu CV 应该有自己的文档的吧。

#2


引用 1 楼 youzelin 的回复:
cvCreateMat 这个方法本身在 C# 这里处理的时候就应该定义成 返回 MCvMat 对象。然后 MCvMat struct / class 中字段变量的定义应该和 C++ 里面数据类型相吻合。

Emgu CV ...... 你在玩 C# 游戏编程?Emgu CV 应该有自己的文档的吧。


是Emgu CV 我调用这个是因为dll的C++使用的是open cv。不是游戏编程,是图像处理算法。Emgu CV的cvCreateMat 方法生成的就是IntPtr  不知道怎么转成open cv的指针了。

#3


LZ 的意思是  把得到的IntPtr转为自己的结构体么?还是? C#调用C++编写的dll指针的应用

#4


是的。那个结构体是Emgu CV 定义的

#5


以前没有做过类似的调用,不知道怎么转成指针,我是用wpf做的界面。

#6