c++生成DLL文件,给c#项目调用

c++生成DLL文件

用c#编写的界面做图像处理不是很方便,因为c#没有官方提供的opencv库,只有opencvsharp——一个日本工程师编写的OpenCV库。所以在c++中编写好图像处理程序,生成DLL文件,再给c#项目调用是个便捷的好办法。

新建c++项目

新建Visual c++的Win32项目——>下一步——>勾选DLL,空项目
在这里插入图片描述
在这里插入图片描述

配置包含目录,库目录,附加依赖项

注意,要配置Release,x64环境,因为DLL要在Release环境下生成
配置附加依赖项时,末尾带d的对应Debug环境,不带d的对应Release环境,如图
在这里插入图片描述

新建.cpp文件和.def文件

1.新建“xkk_dll.cpp”文件,里面是想封装的程序,下面是一个简单的示例,用opencv显示一张图:
在这里插入图片描述
2.新建“source.def”文件,其中LIBRARY语句说明该def文件是属于相应DLL的,在这里是工程名:xkk_dll,如果不同则应用程序连接库时会发生连接错误!EXPORTS语句下列出要导出的函数名称。我们可以在.def文件中的导出函数后加 @n,如函数Test_dll@1,Sub@2
在这里插入图片描述

生成解决方案,生成成功后记录生成的dll所在的位置

在这里插入图片描述

c#调用生成的DLL文件

调用时c#的运行平台应该与c++生成dll时的平台对应,生成dll时是Release,x64;则c#应该为Debug,x64。
c#开头应该添加引用:

using System.Runtime.InteropServices;

在调用dll的位置之前应添加申明:

[DllImport("E:\\project\\xkk_dll\\x64\\Release\\xkk_dll.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public extern static int Test_dll();

之后便是调用:

private void button1_Click(object sender, EventArgs e)
        {
            Test_dll();
        }

采坑

当调用时报错

无法加载 DLL“E:\project\xkk_dll\x64\Release\xkk_dll.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)

网上的解决方法都无效,甚至重装了vs。最后发现是自己c++里配的那个版本的opencv出问题了,所以生成的调用了opencv的dll自然会出问题,重新配了一版opencv,解决了,md。

参考

特别感谢南七老僧xkk,参考了他的文章

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值