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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#ifndef DLL_H #define DLL_H //h文件 int Add(int a, int b); int Mul(int c, int d); #endif
dll.cpp
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
// 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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
LIBRARY "DLLGenerator" EXPORTS Add @1 Mul @2LIBRARY
第五步:点击编译生成解决方案,显示生成完成。此时debug目录下就会出现.dll文件和.lib文件
VS2013静态使用动态链接文件(使用端)
由于很多时候我们没有lib文件和h文件,我们可以使用以下方式。
新建一个win32控制台应用程序的空项目,添加cpp文件,并在程序中加入需要调用的dll文件的路径:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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; }
运行结果如下: