【问题标题】:Can I Load Resource Library (DLL) for x64 build in x86 app?我可以在 x86 应用程序中加载用于 x64 构建的资源库 (DLL) 吗?
【发布时间】:2012-09-18 08:29:54
【问题描述】:

我想加载在默认 Windows 打印机驱动程序资源文件中使用的 unired.dll。 我可以为 Windows Vista x86 加载 unires.dll。

它位于 C:\Windows\System32\spool\drivers\w32x86\3

但现在我使用的是 Windows 7 Pro x64。

所以同名的unires.dll位于 C:\Windows\System32\spool\drivers\x64\3 无法加载。

通过以下代码,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();

请帮助我。 最好的问候!!

【问题讨论】:

标签: x86 64-bit loadlibrary


【解决方案1】:

如评论链接中所述,您无法在 x86 进程中加载​​ x64 库。

解决方案可能是将您的程序移植到 64 位。

【讨论】:

  • 亲爱的 CharlesB 先生。非常感谢您的建议。这对我很有帮助。我尝试将我的解决方案移植到 64 位端口。附言我没有调整自己来使用这个 Stack Over Flow System。这是第一次使用。我该如何感谢你的建议?
  • 不客气;您可以通过单击对勾来接受我的回答。当您获得足够的声誉时,您也可以投票。请参阅stackoverflow.com/faq#howtoask 寻求帮助
  • 谢谢你的好意,CharlesB 先生。我了解如何使用这个系统(^_^)。
【解决方案2】:

根据 MSDN 中有关 LoadResource 的文章,第一个参数应该是可选的。

当我尝试访问位于另一个 exe 文件中的资源时,LoadResource 会产生错误代码 193,而无需传递 hModule 参数。

不起作用:

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);

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 2016-03-29
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    相关资源
    最近更新 更多