是否有任何方法可以将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;
}