首先vs2017 新建项目
选择
看一下方案
只动 project2.h 和project2.cpp
打开project2.h
#ifndef Project1_H
#define Project1_H
中间加你所有的头文件加全局变量
extern "C" __declspec(dllexport)int XXX(stringXXX);
...
#endif
要注意的是有可能会max min 冲突
把非opencv pcl的头文件移上去
下面加
#pragma push_macro("min")
#pragma push_macro("max")
#undef min
#undef max
打开
.cpp
#include "Project2.h"
下面敲自己函数
ok
配置pcl opencv
我比较懒直接把属性复制过来了
然后在c++ 属性里加入
PCL_NO_PRECOMPILE
不要问我为什么 不加有些头文件的类会找不到报无法解析的外部符号
然后把所有相关的dll导进来
看好自己配的是debug 还是release x64/32
生成。。。
调用dll
把刚才生产的dll和lib复制
新建一个空的解决方案
导入一个cpp
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include<string>
using namespace std;
//#pragma comment(lib,"PROJECT1.lib")
//extern "C" int pwp(string filename);
// 静态调用DLL库
//void StaticUse()
//{
// string fie = "TEA.PCD";
// int sum = pwp(fie);
//
// printf("静态调用,sum = %d\n", pwp);
//}
// 动态调用DLL库
void DynamicUse()
{
HMODULE module = LoadLibrary("PROJECT1.dll");
if (module == NULL)
{
printf("加载test1.dll动态库失败\n");
return;
}
typedef int(*AddFunc)(string); // 定义函数指针类型
AddFunc pwp;
pwp = (AddFunc)GetProcAddress(module, "pwp");
string fie = "C:\\Users\\mugger\\source\\repos\\Project6\\Project6\\TEA.PCD";
int sum = pwp(fie);
//int sum = pwp("1.pcd");
printf("动态调用,sum = %d\n", sum);
}
int main(char argc, char* argv[])
{
//StaticUse();
DynamicUse();
system("pause");
return 0;
}