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文字」とか書いてある程度だからなぁ…。

文字数を毎回数える方向にした方がいいのかしら…