c++原函数:Rect* Image2Result(Mat &frame,int **label,double **confidence)
c#中主要用到委托:
委托声明: public delegate IntPtr Recdel(ref Mat frame ,ref int[] label,ref int[] confidence);
[DllImport(@"F:\MFC_study\lbp调用\lbp调用\bin\Debug\lbp_faces.dll",EntryPoint= "Image2Result")]
static extern IntPtr Image2Result (ref Mat frame,ref int[] label,ref int [] confidence);
调用时: Recdel test = Image2Result;
intp = test(ref frame, ref label, ref confidence);
其中Mat为emgucv自带的类
遇到的问题:
此类型的层次结构中有 ComVisible(false)父级,因此不允许 QueryInterface 调用 IDispatch 或类接口。
有谁知道这个怎么解决吗?
在你的非托管代码(lbp_faces.dll)中,你需要 Mat 能够响应 QueryInterface 调用,但是因为 Mat 的 ComVisible 被设置为了 false,从而导致调用失败。—— 我把你的问题总结的正确吗?
如果是,至少有两种解决方案:
1、新建 MyMat 从 Mat 继承,则 Mat 上所有没有被标记为 ComVisible(false) 的成员对 COM 是可见的;
2、问问你自己为什么需要在 lbp_faces.dll 中调用 Mat 成员?是否可以将这部分功能继续留在托管代码中实现,在你的 lbp_faces.dll 中只是做一些计算?
总结得很正确~那正是我的问题所在,新建MyMat从Mat类继承后,调用的时候参数不也还是Mat类型吗?我试了试,但还是有问题~
还是我理解有偏差? 不过还是感谢你给我提供了一个思路
Mat类还是要要传输的哈,第三种方法估计不可行~ 能加一下QQ吗,455271574,这一块确实困扰我好多天了,真的是太麻烦你了
@455271574: 调用时传递 MyMat 对象。
除非将类及其成员显式设置为 false,否则,继承类将向 COM 公开原始类中不可见的基类成员。例如,如果将 ClassA 设置为 false,而且不对其成员应用该特性,则该类及其成员对 COM 是不可见的。但是,如果从 ClassA 派生 ClassB,并将 ClassB 导出到 COM,则 ClassA 的成员将成为 ClassB 的可见基类成员。