文章

动态加载dll并调用接口

动态加载dll并调用接口

[TOC]

动态加载dll并调用接口

有一个简单 cmd.cpp,内部代码如下:

1
2
3
4
5
6
#include <iostream>
#include <windows.h>
extern "C" __declspec(dllexport) int MyFunc(int a, int b)
{
    return a + b;
}

现要将该 cmd.cpp 编译为一个 mydll.dll 供其他程序动态加载调用,动态加载的方式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <windows.h>
typedef int (*LoadFunc)(int, int);  // 函数指针类型定义
int main() 
{
    HINSTANCE hDll = LoadLibraryA("mydll.dll");  // 加载 DLL
    if (hDll != NULL) 
    {
        LoadFunc Func = (LoadFunc)GetProcAddress(hDll, "MyFunc");  // 获取函数指针
        if (Func != NULL) 
        {// 调用函数并测试输出结果
            int result = Func(3, 4);  
            std::cout << "Result: " << result << std::endl;
        } 
        else 
        {
            std::cout << "Failed to get function pointer." << std::endl;
        }
        FreeLibrary(hDll);  // 卸载 DLL
    } 
    else 
    {
        std::cout << "Failed to load DLL." << std::endl;
    }
    return 0;
}

参考12

本文由作者按照 CC BY 4.0 进行授权