打包DLL文件需要注意的东西!

1、对于不同VS平台打包的dll是不能共用的:

例如:VC120内核打包的opencv是无法在VC100内核上运行的,其否则在运行时会出错。这就要求使用对于的opencv版本。或者在VS集成环境下安装

两个内核,例如VC100跟VC120。一般在安装vs的时候会自己带一个内核。其中为:


其中vc10是适合在vs2010上测vc100内核上跑的。所以打包的时候也要选好合适的内核进行编译,否则很容易出错。

2、怎么打包的dll能被引用?

其中的对外的总接口函数需要使用“ extern "C" __declspec(dllexport)”进行修饰,这个是告诉编译器这个是c或者c++语言,

extern "C" __declspec(dllexport) bool init(); //初始化SVM分类器

/*
*src_img 是图像数据指针
*rows 是图像的行数
*cols 是图像的列数
*channels 是图像的通道数
*minarea 识别的图像最小面积,默认参数是1000.
*/
//extern "C" Food_API   int Foodrecognition(string src_path, bool iscamera, int min_area);
//extern "C" Food_API  char* Foodrecognition(int* srcimg, int with, int height, int channel, int min_area);
extern "C" __declspec(dllexport)  char* Foodrecognition(int min_area);
其中那些不对外的函数则不需任何处理--值得是接口函数。接口函数调用的一些其他函数是不需要处理的。其中导入的dll就相当于把其cpp或者hpp加入c#工程里某个CPP里的全局变量还是全局变量。例如:在某个cpp里定义了一个全局

变量,其categorizer c(clusters)如下:


3、如果dll工程也是调用了其他第三方库的该怎么出来?

其中拿opencv来做例子,如果我一个人脸识别的接口函数调用了一些opencv的dll文件,这时我打包的dll名字叫face.dll文件,则在c#怎么进行调用?

我们需要把face.dll调用的所有dll文件放到C#工程exe对应的位置,其不用在工程里添加lib文件,其只需要dll文件即可。

Lib文件的作用:

  这是当dll不在exe目录下时,需要通过lib文件进行查找。

4、为什么有的dll打包会有lib文件有的只有dll文件?

   当接口函数的“ extern "C" __declspec(dllexport)”声明放在了.h文件,则会有lib文件生成,如果接口函数的“ extern "C" __declspec(dllexport)”直接放到cpp文件里的函数定义里则其是只有dll文件。

.













  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值