20200416: 1.新建窗体应用程序(windowApplication); 2.在解决方案中新建dllProject; 3.配置dllProject:openCV(环境变量,包含目录,库目录,依赖项); 4.配置dllProject:输出目录,设置为windowApplication中应用程序(.exe)同路径下(x64路径下); 5. windowApplication新建类headerSpace,声明类中函数;然后在Form.cs调用类函数,运行 注意:需要使用相同的平台

1.dll文件生成

1.搭建opencv环境,实现读入显示图像操作(DllTest.cpp);
先测试opencv环境是否搭建好,然后删除测试代码,输入
#include < opencv2/opencv.hpp > 
#include<iostream>
#include "DllTest.h"


int DllTestAPI test(int y)
{
std::string imagePathColor = "E:\\CellTest\\images\\MuraImages\\color\\L2E9619A7192DF\\";
cv::Mat imgOriginalColor = cv::imread(imagePathColor + "07_64W1_CAM00.bmp", cv::IMREAD_UNCHANGED);

int x = imgOriginalColor.rows + y;

return x;
}
2.DllTest.h文件
添加内容
#pragma once

#define  DllTestAPI _declspec(dllexport) 
extern "C"
{
DllTestAPI int test(int y);
}
3.重新生成dll文件
在工程上右键=>属性=>配置属性=>常规,文件扩展名.exe改为.dll 把配置类型,也都改为dll类型; 重新生成,在找到解决方案所在目录,在Debug目录下即可找到生成的 .dll 文件。(要注意的是,要到整个解决方案的目录下找Debug文件夹) E:\CellTest\Programe\CSharpDllTest\DllTest\x64\Debug
4.建立C#窗口应用程序
1.编译,生成dll,并将dll放在C#所建工程的WindowsFormsApp1\bin\x64\Debug 2.添加按钮控件; 3.添加命令空间程序headerSpace.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


using System.Runtime.InteropServices; //一定得有


namespace headerSpaceSpace
{
class headerSpace
{
[DllImport("DllTest.dll", EntryPoint = "test", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]

public static extern int  test(int y);
}
}

4.点击按钮,添加程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using  headerSpaceSpace;

namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
int cc = headerSpace.test(5);

int x = 0;
}
}
}

2.C#中调试C++写的DLL代码

1.在C#解决方案中,添加现有项,即添加dll对应的工程文件:DllTest.vcxproj; 2.将dll工程重新生成时,得到的.dll .lib .pdb文件,放入到放入C#项目的debug文件夹中; 3.设置C#项目的调试属性,将enable native code debugging选中,允许本地代码调试 4.最后在dll工程需要的地方打上断点,debug模式下运行本项目,调用dll时即可进入dll工程中断点所在的位置。 (当前调试是将C#和dll项目处于同一路径下的,分割成其他路径会怎样,还没有尝试;)
小技巧1
可以将dll生成到指定的目录,这样每次就不需要移动生成的dll了

问题

问题:C# 无法加载DLL(XXX.DLL):找不到指定的模块 把opencv 的三个dll,放置到C:\Windows\System32