GetProcAddressについて
GetProcAddressW
が存在しないようでショック orz
今後のためにも自作するかぁ…
一応置いておこう
/**
* @param hModule [in] DLL モジュールのハンドル を指定します。
* @param lpProcName [in] 関数名、もしくは、下位ワードに関数の順序値・上位ワードに 0 を入れた値を指定します。
* @return 関数が成功した場合はその関数へのポインタが返ります。失敗した場合は NULL が返ります。
*/
inline FARPROC GetProcAddressW(HMODULE hModule, LPCWSTR lpProcName)
{
typedef std::vector<char> TPathBuff;
if(hModule == NULL || lpProcName == NULL)
{
::SetLastError(ERROR_INVALID_PARAMETER);
return NULL;
}
const int nBuffSize = 32768; // UNCの上限がいくつなのかいまいちわからん。
TPathBuff stlBuff(nBuffSize); //
if(!::WideCharToMultiByte(CP_ACP, 0, lpProcName, -1, &stlBuff[0], nBuffSize, NULL, NULL))
{
::SetLastError(ERROR_INVALID_PARAMETER);
return NULL;
}
return ::GetProcAddress(hModule, &stlBuff[0]);
}
/**
* @param hModule [in] DLL モジュールのハンドル を指定します。
* @param lpProcName [in] 関数名、もしくは、下位ワードに関数の順序値・上位ワードに 0 を入れた値を指定します。
* @return 関数が成功した場合はその関数へのポインタが返ります。失敗した場合は NULL が返ります。
*/
inline FARPROC GetProcAddressA(HMODULE hModule, LPCSTR lpProcName)
{
return ::GetProcAddress(hModule, lpProcName);
}
#if defined(UNICODE)
#define GetProcAddress GetProcAddressW
#endif
こんな感じ?
Path に UNC が来られちゃうと、MAX_PATH じゃー足りない可能性が出てくるので、32768文字確保してみましたが……本当に上限32768文字なのか疑問があったり。^^;
MSDNでは「約32,000文字」とか書いてある程度だからなぁ…。
文字数を毎回数える方向にした方がいいのかしら…