【发布时间】:2011-04-28 00:34:01
【问题描述】:
嗨 我有一个基于 ATL 的 COM 插件,还有另一个我想使用的 3rd 方库。它不是 COM dll,而是用 C++ 实现的。
第 3 方 dll 详情如下:
配置类型 = 动态库(.dll)
使用 MFC = 在静态库中使用 MFC
使用 ATL = 不使用 ATL
字符集 = 使用多字节字符集
CRL 支持=不支持 clr
COM dll项目详情如下:
配置类型 = 动态库(.dll)
使用 MFC = 在共享库中使用 MFC
使用 ATL = 到 ATL 的动态链接
字符集 = 使用 unicode 字符集
CRL 支持=不支持 clr
这是我的代码
HRESULT FinalConstruct()
{
LPCWSTR libPath = _T("LicEnf.dll") ;
const char * clibPath = "LicEnf.dll" ;
SetLastError(0);
HMODULE hMod = LoadLibraryA(clibPath);
if(hMod==NULL)
{
LOG4CXX_TRACE(CALMLogger::GetModuleLogger(ModuleName),
_T("Could not load library:GetLastError() returned ") << GetLastError());
}
return S_OK;
}
FinalConstruct 被调用了 3 次。 hMod 始终为 0,并且在我拥有的日志文件中
无法加载库:GetLastError() 返回 183
无法加载库:GetLastError() 返回 126
无法加载库:GetLastError() 返回 126
在哪里
-183 (0xB7) =ERROR_ALREADY_EXISTS
-126 (0x7E) =ERROR_MOD_NOT_FOUND
另一方面,如果我从另一个测试应用程序(普通的 exe 文件)调用此代码,则 loadLibrary 工作正常。 从 COM-dll 加载本机 win32 dll 是否有任何限制,我的错误是什么?
谢谢
【问题讨论】:
-
哪个 EXE 正在加载您的 COM 对象,LicEnf.dll 是否与 EXE 在同一目录中?您是否尝试过使用 LicEnf.dll 的完全限定路径?