c++动态链接库dll编写
时间: 2023-07-29 18:05:49 浏览: 149
绝对经典,教你如何编写自己的dll
在C++中,我们可以使用动态链接库(Dynamic Link Library,DLL)来实现代码的重用和模块化。下面是一个简单的示例,展示如何使用Visual Studio创建一个可供其他程序调用的DLL。
1. 创建一个新的DLL项目
在Visual Studio中,选择“文件”->“新建”->“项目”,在“Visual C++”类别下选择“Win32”,然后选择“Win32项目”。在“应用程序类型”中选择“DLL”,然后按照向导完成项目的创建。
2. 编写代码
在“Solution Explorer”窗口中,双击“dllmain.cpp”文件,这是DLL的入口点(相当于main函数)。在这个文件中,我们可以定义一些全局变量和函数,它们可以被导出到其他程序中使用。下面是一个简单的示例:
```
#include "stdafx.h"
#include "dlltest.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;
}
int add(int a, int b)
{
return a + b;
}
```
在这个示例中,我们定义了一个add函数,它接受两个整数参数并返回它们的和。我们还需要将这个函数导出到其他程序中使用,这可以通过在函数声明前面添加__declspec(dllexport)来实现,如下所示:
```
__declspec(dllexport) int add(int a, int b);
```
3. 编译DLL
按下F7键,或者选择“生成”->“生成解决方案”来编译DLL。编译成功后,在项目文件夹的“Debug”或“Release”文件夹下将生成一个DLL文件。
4. 使用DLL
要使用DLL,需要在其他程序中包含DLL的头文件,并将DLL文件放到与程序相同的目录下。在代码中,我们可以使用LoadLibrary函数加载DLL,然后使用GetProcAddress函数获取DLL中导出的函数地址,并调用它们。下面是一个示例:
```
#include <iostream>
#include <Windows.h>
#include "dlltest.h"
int main()
{
HMODULE hDll = LoadLibrary(L"dlltest.dll");
if (hDll != NULL)
{
typedef int(*AddFunc)(int, int);
AddFunc add = (AddFunc)GetProcAddress(hDll, "add");
if (add != NULL)
{
std::cout << add(1, 2) << std::endl;
}
FreeLibrary(hDll);
}
return 0;
}
```
在这个示例中,我们使用LoadLibrary函数加载了DLL,然后使用GetProcAddress函数获取了add函数的地址,并将其转换为函数指针类型AddFunc。最后,我们可以像调用普通函数一样调用这个函数。注意,在程序结束时,需要调用FreeLibrary函数释放DLL。
这就是一个简单的DLL编写和使用示例。当然,实际应用中可能需要更复杂的代码和数据结构来实现特定的功能。
阅读全文