Я использую MinGW, который не имеет полной функциональности. например. У него нет поддержки потока wchar_t.
Мне удалось обойти это, написав мини-набор манипуляторов (wcusT () в приведенном ниже коде) ... но я обнаружил, что снова сталкиваюсь с GetModuleFileNameEx.
Я не был в состоянии запустить GetModuleFileNameEx ()
Эта функция определена в <psapi.h>
, но, похоже, ей не на что ссылаться. Это мой вопрос №1: Может ли / делает / способен ли MinGW запустить GetModuleFileNameEx? Что мне нужно сделать? Я что-то упустил?
В качестве обходного пути, я попытался запустить его косвенно через вызов его DLL (psapi.dll), который находится в папке system32 Windows ... но что-то не так.
У меня другая ситуация, когда не нужно идти. Буду признателен за любые комментарии по коду ниже .. спасибо
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow)
{ /// typedef and load a dll function
/// ===============================
typedef DWORD (__stdcall *foo)(HANDLE, HMODULE, LPTSTR, DWORD);
LPTSTR ptcPSAPI_DLL = _T("C:\\WINDOWS\\system32\\psapi.dll");
HMODULE hPSAPI_DLL = LoadLibrary(ptcPSAPI_DLL);
if( !hPSAPI_DLL )
{ std::cout<<"ERROR: Failed to load "<<wcusT(ptcPSAPI_DLL)<<std::endl;
return 1;
}
foo GetModFnEx=(foo)GetProcAddress(hPSAPI_DLL,
#ifdef UNICODE
"GetModuleFileNameExW");
#else
"GetModuleFileNameExA");
#endif
/// call the dll library function
/// =============================
HWND hWndNPP = FindWindow(_T("Notepad++"),NULL); // the window calass name
TCHAR ytcMFqFn[FILENAME_MAX]; // the buffer for the file name
DWORD dwBytes = (GetModFnEx)( hWndNPP, NULL, ytcMFqFn, sizeof(ytcMFqFn) );
DWORD dwError = GetLastError();
std::cout<<wcusT(_T("hWndNPP "))<<"="<<hWndNPP <<"="<<std::endl;
std::cout<<wcusT(_T("ytcMFqFn "))<<"="<<wcusT(ytcMFqFn)<<"="<<std::endl;
std::cout<<wcusT(_T("dwBytes "))<<"="<<dwBytes <<"="<<std::endl;
std::cout<<wcusT(_T("dwError "))<<"="<<dwBytes <<"="<<std::endl;
return 0;
// Output ===============
// SBCS
// hWndNPP =0x320606=
// ytcMFqFn ==
// dwBytes =0=
// dwError =0=
// UNICODE
// h W n d N P P =0x320606=
// y t c M F q F n =(☻æ|♀ =
// d w B y t e s =0=
// d w E r r o r =0=
// ======================