发新帖

[C/VC/C++] 动态链接库字符串赋值到一个变量,并返回字符串

零下一度 7月前 190

example

// example.cpp - 动态链接库的源代码
#include <Windows.h>
 
extern "C" __declspec(dllexport) const char* GetString() {
    static const char* str = "Hello, World!";
    return str;
}

main

// main.cpp - 调用动态链接库函数的主程序
#include <iostream>
#include <Windows.h>
 
typedef const char* (*GetStringFunc)(); // 定义函数指针类型
 
int main() {
    HINSTANCE hinst = LoadLibraryA("example.dll"); // 加载DLL
    if (hinst) {
        GetStringFunc getString = (GetStringFunc)GetProcAddress(hinst, "GetString"); // 获取函数指针
        if (getString) {
            const char* str = getString(); // 调用函数
            std::cout << str << std::endl; // 输出字符串
        } else {
            std::cerr << "GetProcAddress failed." << std::endl;
        }
        FreeLibrary(hinst); // 释放DLL
    } else {
        std::cerr << "LoadLibrary failed." << std::endl;
    }
    return 0;
}

在这个例子中,我们首先使用LoadLibrary加载DLL文件,然后使用GetProcAddress获取函数指针。一旦我们有了函数指针,我们就可以像调用本地函数一样调用它,并将返回的字符串赋值给一个变量。最后,在不再需要DLL时,我们使用FreeLibrary释放DLL。

请注意,这里的example.dll必须位于程序的工作目录下,或者在系统的路径中,或者在Windows系统的路径环境变量中,或者在程序运行目录下。否则LoadLibrary将失败。





最新回复 (0)
返回
零下一度
主题数
931
帖子数
0
注册排名
1