编写DLL来实现加法功能,可以按照以下步骤进行:
定义接口函数
在头文件(例如`MyDLL.h`)中,定义一个名为`Add`的函数,它接受两个整数参数并返回一个整数结果。使用`extern "C"`关键字来指定C链接方式,以确保函数名在不同的编译器和编程语言之间能够正确地被调用。
```cpp
ifdef MYDLL_EXPORTS
define MYDLL_API __declspec(dllexport)
else
define MYDLL_API __declspec(dllimport)
endif
extern "C" MYDLL_API int Add(int a, int b);
```
实现接口函数
在对应的源文件(例如`MyDLL.cpp`)中,实现`Add`函数,将两个输入的整数相加并返回结果。
```cpp
include "MyDLL.h"
int Add(int a, int b) {
return a + b;
}
```
编译DLL
编译上述代码以生成DLL文件(例如`MyDLL.dll`)和导出函数列表文件(例如`MyDLL.exp`)。
调用DLL
在主程序中,使用`LoadLibrary`和`GetProcAddress`函数动态加载DLL,并获取`Add`函数的地址,然后调用该函数。
```cpp
include include "MyDLL.h" int main() { HINSTANCE hinstDLL = LoadLibrary(TEXT("MyDLL.dll")); if (hinstDLL == NULL) { return 1; } typedef int (*AddFunc)(int, int); AddFunc pAdd = (AddFunc)GetProcAddress(hinstDLL, "Add"); if (pAdd == NULL) { FreeLibrary(hinstDLL); return 1; } int result = pAdd(3, 4); FreeLibrary(hinstDLL); return 0; } ``` 示例代码 MyDLL.h ```cpp ifdef MYDLL_EXPORTS define MYDLL_API __declspec(dllexport) else define MYDLL_API __declspec(dllimport) endif extern "C" MYDLL_API int Add(int a, int b); ``` MyDLL.cpp ```cpp include "MyDLL.h" int Add(int a, int b) { return a + b; } ``` 主程序(例如`main.cpp`) ```cpp include include "MyDLL.h" int main() { HINSTANCE hinstDLL = LoadLibrary(TEXT("MyDLL.dll")); if (hinstDLL == NULL) { return 1; } typedef int (*AddFunc)(int, int); AddFunc pAdd = (AddFunc)GetProcAddress(hinstDLL, "Add"); if (pAdd == NULL) { FreeLibrary(hinstDLL); return 1; } int result = pAdd(3, 4); FreeLibrary(hinstDLL); return 0; } ``` 编译和运行 1. 编译`MyDLL.cpp`生成`MyDLL.dll`和`MyDLL.exp`。 2. 编译主程序(例如`main.cpp`),并链接`MyDLL.lib`。 3. 运行主程序,调用`MyDLL.dll`中的`Add`函数。 通过以上步骤,你可以成功编写一个DLL来实现加法功能,并在主程序中动态调用该DLL。