VS2017打包C++的DLL动态库动态库并调用
如图:创建一个DLL的的动态链接库
然后,添加一个头文件myDll.h
在myDll.h中添加一句话,需要引出的函数,都要添加到这里,因为我的例子比较简单,只有一个函数,所以只添加一个。
然后在cpp中正常写代码。
#include "pch.h"
#include "myDll.h"
#include <stdio.h>
#include <string.h>
#include <tchar.h>
TCHAR* DemoAdd(TCHAR *a) {
TCHAR b1[] = _TEXT("bcd");
TCHAR *b = b1;
int len_a = wcslen(a);
int len_b = wcslen(b);
TCHAR* c = new TCHAR[len_a + len_b + 1];
c[0] = _T('\0');
wcscat(c, a);
wcscat(c, b);
//std::wcout << c << std::endl;
return c;
}
然后点击生成解决方案,没有报错后,到目录下查看,因为我是在debugx64下运行的,所以我的文件就在debugx64内,看到生成的dll文件。证明生成dll成功。
创建一个控制台程序,如图:
然后将dll文件复制到新建项目的cpp同目录下
然后打开项目,在cpp中写下如下代码:
#include <iostream>
#include <Windows.h>
#include <stdio.h>
#include <string.h>
#include <tchar.h>
using namespace std;
typedef TCHAR*(*_DemoAdd)(TCHAR *a);//申明那个函数的类型;
HMODULE hm = LoadLibrary(L"MakeDllTest2.dll");//找到对应dll;
int main()
{
std::cout << "Hello World!\n";
string output;
if (hm != NULL) {
_DemoAdd DemoAdd = (_DemoAdd)GetProcAddress(hm, "DemoAdd");
TCHAR a1[] = _TEXT("this is ");
TCHAR *a = a1;
wcout << a << endl;
TCHAR* k = DemoAdd(a);
wcout << k;
}
}
typedef TCHAR*(*_DemoAdd)(TCHAR *a);//申明那个函数的类型;
这句代码表示导入dll中的函数,跟之前dll中的申明一样,需要引入几个就写几个。运行代码,查看结果。
如图,拼接了一个字符串,成功返回结果。