0

デフォルトの Windows プリンタ ドライバ リソース ファイルで使用されている unired.dll をロードしたい。Windows Vista x86 用の unires.dll をロードできます。

C:\Windows\System32\spool\drivers\w32x86\3 にあります。

しかし、今は Windows 7 Pro x64 を使用しています。

そのため、C:\Windows\System32\spool\drivers\x64\3 にある同じ名前の unires.dll はロードできません。

次のコードでは、GetLastError() は 193 を返します。

出来ますか?または不可能ですか?Visual Studio 2005 Pro を使用しています。x64 と x86 をビルドしようとしましたが、それぞれ失敗しました。

TCHAR libName[MAX_PATH];
wsprintf(libName , _T("unires.dll"));

HINSTANCE hLibraryInstance = ::LoadLibrary(libName);
DWORD ErrorId=::GetLastError();

std::wofstream out;
out.open(_T("unires.txt"));

for(UINT resKey=0;resKey<100000;resKey++)
{

    TCHAR * resBuf=new TCHAR[CHAR_MAX]; 
    int BufferMaxSize=CHAR_MAX;
    int Result=::LoadString(hLibraryInstance, resKey, resBuf, BufferMaxSize);

    wstring resStr=resBuf;

    if(!resStr.empty())
    {
        out<<resKey;
        out<<" ";
        out<<resStr.c_str();
        out<<endl;
    }

    if(resBuf!=NULL)
    {
        delete [] resBuf;
    }
}

out.close();

私を助けてください。よろしくお願いします!!

4

2 に答える 2

2

コメント リンクで述べたように、x86 プロセスで x64 ライブラリを読み込むことはできません。

解決策は、プログラムを 64 ビットに移植することかもしれません。

于 2012-09-18T08:35:11.320 に答える
0

LoadResource に関する MSDN の記事によると、最初のパラメーターはオプションである必要があります。

私の場合、hModule パラメータを渡さずに別の exe ファイルにあるリソースにアクセスしようとすると、LoadResource はエラー コード 193 を生成します。

動作しません:

HRSRC hResource = FindResource(LoadLibrary(strFileName.c_str()), MAKEINTRESOURCE(1), RT_STRING);
HGLOBAL hResHandle = LoadResource(NULL, hResource);

魅力のように機能します:

HMODULE hExe = LoadLibrary(strFileName.c_str());
HRSRC hResource = FindResource(hExe, MAKEINTRESOURCE(1), RT_STRING);
HGLOBAL hResHandle = LoadResource(hExe, hResource);
于 2013-02-20T16:38:21.787 に答える