https://blog.csdn.net/alansss/article/details/81320548
最近需要将写好的matlab代码转成基于OpenCV的代码,然后再封装成dll进行发布。一开始直接看基于OpenCV的dll生成,但是都不太成功,故而先试试没有OpenCV的dll生成。
主要参考了以下两个网页:
VS2013生成dll及动态调用:
https://blog.csdn.net/liu_matthew/article/details/55804710
vs 无法将参数 1 从“const char *”转换为“LPCWSTR” 解决办法:
https://blog.csdn.net/u011394598/article/details/80536753
第一步:文件->新建->项目->win32控制台应用程序 项目名称:DLLGenerator
应用程序类型:DLL 附加项目:空项目
第二步:在创建的dll工程中编写自己需要编译成dll的函数cpp和头文件h
dll.h
#ifndef DLL_H
#define DLL_H
//h文件
int Add(int a, int b);
int Mul(int c, int d);
#endif
dll.cpp
#include "DLL.h"
//cpp文件
int Add(int a, int b)
{
return a + b;
}
int Mul(int c, int d)
{
return c * d;
}
第三步:建立dll源文件dllmain.cpp,用来定义应用程序的入口点
dllmain.cpp
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include <windows.h>
BOOL APIENTRY DllMain(
HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
第四步,建立源文件Source.def
LIBRARY "DLLGenerator"
EXPORTS
Add @1
Mul @2LIBRARY
第五步:点击编译生成解决方案,显示生成完成。此时debug目录下就会出现.dll文件和.lib文件
VS2013静态使用动态链接文件(使用端)
由于很多时候我们没有lib文件和h文件,我们可以使用以下方式。
新建一个win32控制台应用程序的空项目,添加cpp文件,并在程序中加入需要调用的dll文件的路径:
#include<iostream>
#include<Windows.h>
#include<time.h>
typedef int(*Dllfun)(int, int);
using namespace std;
int main()
{
Dllfun f1,f2;
HINSTANCE hdll;
hdll = LoadLibrary("E:\\Code\\C\\DLLGenerator\\Debug\\DLLGenerator.dll");
//此处报错的话,右键选择项目->属性->常规->字符集(选择多字节就ok)
if (hdll == NULL)
{
FreeLibrary(hdll);
}
f1 = (Dllfun)GetProcAddress(hdll, "Add");
f2 = (Dllfun)GetProcAddress(hdll, "Mul");
if (f1 == NULL)
{
FreeLibrary(hdll);
}
int a = f1(4, 10);//加法
int b = f2(4, 10);//乘法
cout <<"4+10=" << a << endl;
cout << "4*10=" << b << endl;
FreeLibrary(hdll);
return 0;
}
运行结果如下:
来源:oschina
链接:https://my.oschina.net/u/4287258/blog/3510064