一、生成DLL文件
生成DLL文件需要用到兩個文件,一個頭文件,dll.h,和一個源文件,dll.c
頭文件dll.h內容:
#ifndef _DLL_DEMO_H_
#define _DLL_DEMO_H_
#ifdef DLLDEMO_EXPORTS
#define DLL_DEMO _declspec( dllexport )
#else
#define DLL_DEMO _declspec(dllimport)
#endif
extern "C" DLL_DEMO int Add(int a, int b);
#endif
dll.c內容
#include "dll_demo.h"
int Add(int a, int b)
{
return (a + b);
}
二、調用DLL文件
調用DLL有兩種方式。
(一)靜態調用:使用.h+.lib+.dll
#include <windows.h>
#include <iostream>
#include "DLL.h"
#using namespace std;
#pragma comment(lib, "DLL.lib")
extern "C" _declspec(dllimport) int Add(int a, int b);
int main(int argc, char *argv[])
{
cout << Add(2, 3) << endl;
system("pause");
return 0;
}
把頭文件和lib文件、dll文件都放到跟源文件同一目錄下即可使用。當然,路徑可以重新設置。
(二)動態調用:僅使用dll文件
#include <windows.h>
#include <iostream>
using namespace std;
typedef int (*AddFunc)(int a, int b);
int main(int argc, char *argv[])
{
HMODULE hDll = LoadLibrary(L"DLL.dll");
if (hDll != NULL)
{
AddFunc add = (AddFunc)GetProcAddress(hDll, "Add");
if (add != NULL)
{
cout<<add(2, 3)<<endl;
}
FreeLibrary(hDll);
}
}
在字符串前加一個L作用: unicode字符集是兩個字節組成的。L告示編譯器使用兩個字節的 unicode 字符集。