gpt4 book ai didi

c++ - 将 Mat 从 C++ dll 返回到 VB.Net

转载 作者:太空宇宙 更新时间:2023-11-03 22:59:35 25 4
gpt4 key购买 nike

我用 C++ 编写了一个函数,它接受一个 Mat 类对象并在处理后返回一个 Mat。我想将其集成到用 VB.NET 编写的 UI 中

这段代码是我用C++写的

extern "C" _declspec(dllexport) Mat cropImage(Mat matA){
Mat matB = processingObject.doSomething(matA);
return matB;
}

processingObject.doSomething(matA) 工作正常。

如何在 VB 中使用此 dll?我不介意更改 C++ 代码来完成这项工作。

谢谢

更新>>>>

找到了解决该问题的方法。虽然不是 100% 我正在寻找的东西

C++

extern "C" __declspec(dllexport) int* cropImage(char* path, int& size)
{
Mat matA = pavObj.cropped_liquid_region(path);

int rows = matA.rows;
int cols = matA.cols;
int channels = matA.channels();

int length = rows*cols*channels + 3;
size = length;
int* arr = new int[length];

arr[0] = rows;
arr[1] = cols;
arr[2] = channels;

Mat layer[3];
split(matA, layer); // split into color layers BGR
int count = 3;

for(int i=0;i<3;i++){
for(int j=0;j<layer[i].rows;j++){
for(int k=0;k<layer[i].cols;k++){
arr[count] = layer[i].at<uchar>(j, k);
count++;
}
}
}

return arr;
}

extern "C" __declspec(dllexport) int ReleaseMemory(int* pArray)
{
delete[] pArray;
return 0;
}

VB 签名

<DllImport("mat.dll", CallingConvention:=CallingConvention.Cdecl)> _
Public Shared Function cropImage(ByVal path As String, ByRef sz As Integer) As IntPtr
End Function

<DllImport("mat.dll", CallingConvention:=CallingConvention.Cdecl)> _
Public Shared Function ReleaseMemory(ByVal ptr As IntPtr) As Integer
End Function

VB调用dll

Dim size As Integer
Dim ptr As IntPtr = cropImage(path, size)
Dim result(size) As Integer
Marshal.Copy(ptr, result, 0, size)
ReleaseMemory(ptr)

所以基本上发生的是图像的内容被带到一维数组并传递到再次重建图像的托管端。

最佳答案

您需要在 C# 端使用 DllImport 调用来调用您的

http://msdn.microsoft.com/en-us/library/aa984739(v=vs.71).aspx
How to use <DllImport> in VB.NET?
http://www.codeproject.com/Articles/552348/C-23-2fCplusinteroppluswithplusDllImport

要点是,您需要像这样导入您的 dll:

<System.Runtime.InteropService.DllImport("mat.dll", _
SetLastError:=True, CharSet:=CharSet.Auto)> _
<< VB Signature of your cropImage function >>

您可能还需要进行一些参数编码以在 VB 和 C++ 之间“翻译”您的 Mat 类型

关于c++ - 将 Mat 从 C++ dll 返回到 VB.Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21718797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com