Windows 实现存根函数并在运行时将其链接到库中的定义

Windows 实现存根函数并在运行时将其链接到库中的定义,windows,visual-c++,clang,shared-libraries,Windows,Visual C++,Clang,Shared Libraries,当我阅读有关使用共享库的内容时,我了解了如何在运行时解析标准C函数(如printf)的定义。 我希望以类似的方式在我的项目中实现功能。我可以为编译和链接阶段的函数定义存根。函数的实际定义将出现在设备上的库中,我将在其中运行可执行文件 假设我有一个主函数: #include<stdio.h> #include"sum.h" int main() { int num = 10; int result = 0; result = sum(num)

当我阅读有关使用共享库的内容时,我了解了如何在运行时解析标准C函数(如printf)的定义。 我希望以类似的方式在我的项目中实现功能。我可以为编译和链接阶段的函数定义存根。函数的实际定义将出现在设备上的库中,我将在其中运行可执行文件

假设我有一个主函数:

#include<stdio.h>
#include"sum.h"
int main()
{
    int num = 10;
    int result = 0;
    result = sum(num);
    printf("Sum = %d\n",result);
    return 0;
}
在构建此可执行文件时,我将使用sum_stub.c文件中的存根定义:

// sum_stub.c
#include<stdio.h>
#include"sum.h"
int sum(int num) {
    int res = 0;
    printf("Inside stubbed function. Result=%d\n",res);
    return res;
}
//sum\u stub.c
#包括
#包括“sum.h”
整数和(整数){
int res=0;
printf(“内部存根函数。结果=%d\n”,res);
返回res;
}
让使用上述文件生成的可执行文件为get_sum.exe

将计算sum的实际函数被编译为一个共享库,例如sum.dll

// sum.c that will be compiled to sum.dll
#include<stdio.h>
#include"sum.h"
int sum(int num) {
    int res = 0;
    int i=0;
    for (i=0; i<num; i++)
        res = res + i;
    return res;
}
//将编译为sum.dll的sum.c
#包括
#包括“sum.h”
整数和(整数){
int res=0;
int i=0;

对于(i=0;i,您正在查找的称为“延迟加载的DLL”。中提供了有关重写默认DLL加载代码的详细信息

// sum.c that will be compiled to sum.dll
#include<stdio.h>
#include"sum.h"
int sum(int num) {
    int res = 0;
    int i=0;
    for (i=0; i<num; i++)
        res = res + i;
    return res;
}