建立一个动态链接库(A simple DLL project类型),在其中自行编制1-2个函数
时间: 2024-02-03 17:15:16 浏览: 21
好的,以下是一个简单的动态链接库项目,内含两个函数:
1. add_numbers: 接收两个整数,返回它们的和
2. reverse_string: 接收一个字符串,返回它的逆序字符串
```c++
#include <string>
#include <iostream>
#ifdef SIMPLEDLL_EXPORTS
#define SIMPLEDLL_API __declspec(dllexport)
#else
#define SIMPLEDLL_API __declspec(dllimport)
#endif
extern "C" {
SIMPLEDLL_API int add_numbers(int a, int b);
SIMPLEDLL_API std::string reverse_string(std::string str);
}
SIMPLEDLL_API int add_numbers(int a, int b) {
return a + b;
}
SIMPLEDLL_API std::string reverse_string(std::string str) {
std::string reverse_str = "";
for (int i = str.length() - 1; i >= 0; i--) {
reverse_str += str[i];
}
return reverse_str;
}
```
在 Visual Studio 中创建一个 Win32 项目,选择 A Simple DLL Project 类型,将上述代码粘贴到 dllmain.cpp 文件中,并将项目命名为 SimpleDLL。
现在,我们可以编译这个项目并生成 SimpleDLL.dll 文件。其他程序可以通过 LoadLibrary 和 GetProcAddress 函数加载这个 DLL 并调用其中的函数。例如,以下代码演示了如何加载 SimpleDLL.dll 并调用其中的函数:
```c++
#include <windows.h>
#include <iostream>
#include <string>
typedef int (*AddNumbersFunc)(int, int);
typedef std::string (*ReverseStringFunc)(std::string);
int main() {
HINSTANCE hinstLib = LoadLibrary(TEXT("SimpleDLL.dll"));
if (hinstLib != NULL) {
AddNumbersFunc add_numbers = (AddNumbersFunc)GetProcAddress(hinstLib, "add_numbers");
ReverseStringFunc reverse_string = (ReverseStringFunc)GetProcAddress(hinstLib, "reverse_string");
if (add_numbers != NULL && reverse_string != NULL) {
std::cout << "add_numbers(2, 3) = " << add_numbers(2, 3) << std::endl;
std::cout << "reverse_string(\"Hello, world!\") = " << reverse_string("Hello, world!") << std::endl;
}
FreeLibrary(hinstLib);
}
return 0;
}
```