在没有declspec(dllexport)的mingw/msys2中构建dll



是否有任何方法可以将Windows DLL与所需的导出符号一起编译Windows DLL,而无需使用_declspec(dllexport)

注释源代码

您可能已经解决了问题,已经过去了一年,但是其他人可能会有这个问题,因此:

是的,在mingw中,您不必添加declspec(dllexport),一个充分的理由可能是您只想使用别人的库源而无需修改/分叉。

这是一个示例 lib.c ,它将被编译到DLL中,并用下面的makefile导出func

int func(int A) {
    return A*2;
}

和a lib.h 用于可执行文件中的使用:

typedef int func_type(int A);

Makefile ,但请确保修复凹痕:这两个凹痕线需要一个选项卡,而不是4个空格:

all: lib.dll ex.exe
lib.dll: lib.c
    gcc -o lib.dll -shared lib.c -Wall
ex.exe: ex.c
    gcc -o ex.exe ex.c -Wall

请注意,-shared是什么使输出成为有效的DLL并使其导出func

示例 ex.c 用于测试目的:

#include <stdio.h>
#include <windows.h>
#include <assert.h>
#include "lib.h"
int main(void) {
    void* Lib = LoadLibraryW(L"lib.dll");
    assert(Lib);
    func_type (*func) = (func_type*)GetProcAddress(Lib, "func");
    assert(func);
    printf("%in", func(11)); // should output 22
    return 0;
}

最新更新