LoadLibrary - 在C ++中更正CleanUp

时间:2013-07-23 15:26:54

标签: c++ visual-studio-2012 loadlibrary resource-cleanup

我在C ++ Visual Studio 2012中有这个小代码,用于使用cygwin从dll文件构建中调用静态函数,下面的代码完全有效。问题是,有时它会在函数调用时崩溃,或者通常将结果值输出到控制台,但Visual Studio中的调试器不会向前移动。奇怪的行为。我猜可能在退出应用程序后我没有正确清理?我第一次加载VS,它可以工作,但经过一些调试和崩溃后,这种情况就开始发生了。

PFN_HELLO fnHello;
HMODULE hLib, h = LoadLibrary(TEXT("cygwin1.dll")); 
PFN_CYGWIN_DLL_INIT init = (PFN_CYGWIN_DLL_INIT) GetProcAddress(h,"cygwin_dll_init");
init();

hLib = LoadLibrary (TEXT("cyghello.dll"));

if (NULL == hLib)
{
DWORD _err = GetLastError();
//return 1;
}

//typedef LRESULT (WINAPI *PFN)(HWND, UINT, WPARAM, LPARAM);
// PFN MySendMessageW;

//MySendMessageW = (PFN) GetProcAddress(hLib,"runMainRoutine");

fnHello = (PFN_HELLO) GetProcAddress (hLib, "runMainRoutine@4");


if (NULL == fnHello)
{
DWORD _err = GetLastError();
//return 1;
}


char* _bablabla = fnHello(_input);

FreeLibrary(h);
FreeLibrary(hLib);

return _bablabla;

1 个答案:

答案 0 :(得分:0)

对于从DLL静态函数返回char *的任何人,你必须在dll中分配char [],但是在你的应用程序(调用者)中。