c# - c++调用opencv相关函数并打包成dll,c#调用不了

标签 c# c++ opencv

c++在调用opencv相关函数后调用dll,c#调用不了。但是如果我的dll中不使用opencv,它运行良好。就像opencv包中的imread函数一样。

我在打包dll的时候用到了opencv.dll和它的lib文件。在C++中,他们的相关环境已经配置好了。不知道c#是否需要配置相关的opencv环境,或者还需要什么其他方法。

[c++ code]-Packaged into test.dll
#include<memory.h>
#include<time.h>
#include<math.h>
#include<vector>
#include"test.h"

#pragma comment(lib,"opencv_world310.lib")

using namespace cv;
using namespace std;

extern "C" __declspec(dllexport) int test();
int test()
{
    Mat readImage = imread("D:\\pic\\pic1.JPG");
    int rowPic = readImage.rows;
    return rowPic;
}

[c# code]-Call the test.dll
namespace testOilDetectionCsharp
{
    public sealed partial class MainPage : Page
    {
        [DllImport("test.dll", CharSet = CharSet.Unicode)]
        extern static int test();

        public MainPage()
        {
            this.InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            unsafe
            {
                int num = test();
                textBox.Text = num.ToString();
            }
        }

    }
}

就像测试函数一样,我有pic路径,但是在c#中,调用该函数理论上会返回图像中的行数。不是这种情况。 opencv 中的 imread 函数不起作用。 谢谢!

最佳答案

从外观上看,我认为这是一个 dll 未找到异常。我遇到过很多这样的。也许你可以通过运行 EventViewer(它是 Windows 中的一个实用程序)来解决这个问题。事件查看器将有一个关于丢失的 DLL 的条目。可能将所有 opencv dll 复制到执行路径将解决此问题。

关于c# - c++调用opencv相关函数并打包成dll,c#调用不了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58731949/

相关文章:

c# - 使用来自 .NET 命令行应用程序的签名 Google Maps API 地理编码请求

c++ - Cuda 全局 __device__ 变量自动初始化

c++ - 在 Netbeans 中配置 Opencv

ios - Objective C 中 iOS 的图像模糊检测

c++ - cv::Point3f 赋值运算符是否执行 "deep"拷贝?

c# - CQRS - 如何处理用户查看页面或查询

c# - 将列表转换为 ObservableCollection

c# - 为什么将 Application_Start 设置为静态方法(FxCopAnalyzer 的建议)会导致 404 错误?

c++ - (num+mod)%mod 语句需要什么?

c++ - 错误 : use of deleted function?