循环中的 C LoadLibrary

C LoadLibrary in a loop

我尝试遍历一个目录并从多个 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 不应该以这种方式使用?

谢谢

OP 的 linked code(虽然不是发布的)包括以下内容。

    d = opendir(".");
    setvoidfunc = (MYSETVOIDPROC) GetProcAddress(dll, "setVoidCallBack");
    if (d) {
        while ((dir = readdir(d)) != NULL) {
            char *tok = strtok(dir->d_name, ".");
            if(NULL == tok)
                continue;                

strtok 调用(可能)修改了 dir->d_name 缓冲区,这违反了 readdir 的 Open Group 要求。

The application shall not modify the structure to which the return value of readdir() points, nor any storage areas pointed to by pointers within the structure.

由于违规,第一次 dir->d_name 修改后发生的所有事情都未被标准和实现依赖定义。