pcl/opencv 算法生成dll并调用

pcl 和opencv都是开源的算法库,在这两个库的基础上开发的项目,下面需要开发界面gui,最好能封装为dll,不同的算法调用传入传出,调用次数完全根据gui编程的来
下面记录一下摸索出的算法封装dll部分和调用两部分,opencv和pcl两个库通用。
一、算法封装部分 pcl1.8.1 vs2015
新建项目-Win32控制台应用程序,起名字和位置-确定-向导下一步-应用程序类型选DLL-空项目不勾选,其他默认-完成
可以看到头文件有两个 stdafx.h targetver.h 源文件dllmain.cpp stdafx.cpp和一个自己起名的.cpp(为了方便后面叫这个cpp为oho.cpp)
1.打开stdafx.h将自己算法的头文件宏定义,命名空间等复制进去,
2.打开oho.cpp,include头文件为stdafx.h 以及必要的iostream string等头文件,根据自己的情况来包含
3.全局变量函数等全部复制到oho.cpp下 struct、class类似
4.现在oho.cpp应该都是算法的一个个函数,在stdafx.h里声明这些函数,主要声明括号里只要类型不要变量名,按照顺序声明即可。
5.在源文件部分右键-添加-新建项-左边选代码-模块定义文件(.def)名字不改
6.打开source.def文件

LIBRARY"oho"

EXPORTS
      //填入函数名 @1
      //第二个函数名 @2 //注意@和函数名之间有空格
    ...

7.菜单栏 项目-最后一项oho属性页 配置一遍pcl,什么包含目录库目录、附加依赖项之类的可以参考我这里:
PCL1.8.1+VS2015+WIN7
8.c/c++预处理器定义添加两个:

_SCL_SECURE_NO_WARNINGS _CRT_SECURE_NO_WARNINGS NOMINMAX( 不然会报错错误 C2589 “(”:“::”右边的非法标记 )
9.生成-生成解决方案,
10.根据自己release还是debug版本在对应的目录下去找oho.dll 和oho.lib

二、dll的调用部分
新建项目-空项目-起名字和路径(为了方便后续叫UseDll.cpp)
1.打开UseDll.cpp 将oho.dll放到此项目根路径下
2.必要的头文件不能缺,例如有的函数形参就包括pcl里面的模板或者boost指针,那这部分的头文件也要包括在UseDll.cpp里,这里推荐直接把属性管理器里保持pcl配置部分的属性表添加进去
3.全局变量定义写后面

4.根据封装cpp里函数的返回类型和函数的声明顺序

typedef int (*第一个函数名)(string file1);
typedef void(*第二个函数名)(char *file2,const string file3);
typedef int(*第三个函数名)(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud);
...
 int main()
{
   const char*dllName ="oho.dll";
  const char* funName1="第一个函数名";
  const char* funName2="第二个函数名";
  const char* funName3="第三个函数名";
...

HMODULE hDLL=loadLibrary(dllName);
if (hDLL !=NULL)
{
    第一个函数名 fp1 = 第一个函数名(GetProcAddress(hDLL, funName1));
    第二个函数名 fp2 =第二个函数名(GetProcAddress(hDLL, funName2));

    ...
//按照你封装调用的顺序
#pragma region
   if (fp1!= NULL){
         fp1("file1");
    }
else{
    std::cout<<"cannot find function"<<funName1<<std::endl;

}
#pragma endregion


...



 FreeLibrary(hDLL);

}
  else
{
  cout<<"cannot find"<<dllName<<endl;
}
return 1;

}

5.调试就可以了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜是菜人是真帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值