C ++ / CLI DLL上的LoadLibrary和GetProcAddress - 加载两次

时间:2014-01-13 16:55:52

标签: c++-cli loadlibrary getprocaddress

我有一个带有C文件的.vcxproj,它执行以下操作:

extern long __stdcall CallCreateTube(long **Data)
{
    char DllPath[256];
    FARPROC pfn;
    long rtn;
    long *pData;

    pData = *Data;

    lstrcpy(DllName, progPath);
    lstrcat(DllName, "XEQ\\tube");
    lstrcat(DllName, ".DLL");

    HANDLE hLib = LoadLibrary(DllPath); // believe me here that DllPath is constructed properly.
    if (!hLib) return -1;

    pfn = GetProcAddress((HMODULE)hLib, "CreateTube");
    if (!pfn) return -1;

    rtn = (pfn) (pData); // this will load tube.dll again!

    if(!FreeLibrary((HMODULE)hLib))
        return -1;
    return rtn;
}

使用Process Explorer,当我调用LoadLibrary时,会加载“tube.dll”。当我调用上面的行rtn = (pfn)(pData)时,它会再次加载“tube.dll”!!

这个dll(tube.dll)是一个用/ clr编译的混合程序集(C ++ / CLI)。是否有可能在clr上下文中加载“tube.dll”的第二个实例?如果是这样,如何防止? DLL需要加载一次才能使用GetProcAddress,但在调用函数时不会再次加载!

0 个答案:

没有答案