我想加载在默认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();
请帮帮我。 最好的问候!!
答案 0 :(得分:2)
如评论链接中所述,您无法在x86进程中加载x64库。
解决方案可能是将程序移植到64位。
答案 1 :(得分:0)
根据有关LoadResource的MSDN文章,第一个参数应该是可选的。
对我来说,当我尝试访问位于另一个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);