【发布时间】:2020-12-04 21:41:20
【问题描述】:
我尝试遍历一个目录并从几个 dll 文件中加载函数。每个 dll 文件只导出一个与 dll 同名的函数。问题是,它只加载第一个文件。
DIR *d;
struct dirent *dir;
d = opendir(".");
if(d) {
while((dir = readdir(d)) != NULL) {
// split filename into 'name', 'ext' and 'fullname'
// '.', '..' and all unliked files are sorted out correctly
HINSTANCE ext_dll = LoadLibrary(fullname);
if(NULL != ext_dll) {
MYPROC ext_func = (MYPROC) GetProcAddress(ext_dll, name);
}
ext_dll = NULL;
}
}
但是,当我只写两次时,它就可以工作。
HINSTANCE ext_dll = LoadLibrary("ext1.dll");
if(NULL != ext_dll) {
MYPROC ext_func = (MYPROC) GetProcAddress(ext_dll, "ext1");
}
ext_dll = LoadLibrary("ext2.dll");
if(NULL != ext_dll) {
MYPROC ext_func = (MYPROC) GetProcAddress(ext_dll, "ext2");
}
我的代码有问题还是 LoadLibrary 不应该这样使用?
谢谢
【问题讨论】:
-
你对目录做了什么,比如
.和..? -
当我打印正确的名称时,我会将所有这些都整理出来。我编辑问题。
-
这看起来像是 Windows 代码 (
LoadLibrary等) 和 Linux 代码 (readdir) 的混合体。这是怎么回事? -
好吧,如果这不是实际代码,而是它的替代品,那么您能展示实际代码吗?
LoadLibrary并没有感觉到你在循环中使用了它 -
@NoOb 这与信念或证明无关。关于stackoverflow.com/help/minimal-reproducible-example
标签: c loadlibrary