Winapi 从ATL COM插件调用LoadLibrary
嗨 我有一个基于ATL的COM插件,还有另一个我想使用的第三方库。它不是COMDLL,在C++中实现。 有关第三方dll的详细信息如下: 配置类型=动态库(.dll) 使用MFC=在静态库中使用MFC 使用ATL=不使用ATL 字符集=使用多字节字符集 CRL支持=无clr支持 有关COM dll项目的详细信息如下: 配置类型=动态库(.dll) 使用MFC=在共享库中使用MFC ATL的使用=到ATL的动态链接 字符集=使用unicode字符集 CRL支持=无clr支持 这是我的密码Winapi 从ATL COM插件调用LoadLibrary,winapi,atl,Winapi,Atl,嗨 我有一个基于ATL的COM插件,还有另一个我想使用的第三方库。它不是COMDLL,在C++中实现。 有关第三方dll的详细信息如下: 配置类型=动态库(.dll) 使用MFC=在静态库中使用MFC 使用ATL=不使用ATL 字符集=使用多字节字符集 CRL支持=无clr支持 有关COM dll项目的详细信息如下: 配置类型=动态库(.dll) 使用MFC=在共享库中使用MFC ATL的使用=到ATL的动态链接 字符集=使用unicode字符集 CRL支持=无clr支持 这是我的密码 HRES
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;
}
HRESULT FinalConstruct()
{
LPCWSTR libPath=_T(“licensf.dll”);
const char*clibPath=“LicEnf.dll”;
SetLastError(0);
HMODULE hMod=LoadLibraryA(clibPath);
如果(hMod==NULL)
{
LOG4CXX_跟踪(CALMLogger::GetModuleLogger(ModuleName),
_T(“无法加载库:GetLastError()返回”)是否尝试指定库的完整路径?加载库所需的完整路径名。以下是工作代码
HRESULT FinalConstruct()
{
LPCWSTR libPath = _T("d:\\projects\\LMS\\src\\LMS_LIB\\LicEnf\\Debug\\LicEnf.dll" ) ;
DWORD retval=0;
BOOL success;
TCHAR buffer[BUFSIZE]=TEXT("");
TCHAR buf[BUFSIZE]=TEXT("");
TCHAR** lppPart={NULL};
SetLastError(0);
SetErrorMode(0);
retval = GetFullPathName(libPath,
BUFSIZE,
buffer,
lppPart);
HMODULE hMod = LoadLibrary(buffer);
if(hMod==NULL)
{
int lastError = GetLastError();
CString message;
message.Format( _T("Failed in finding LicEnf.dll (%d)"), lastError );
LOG4CXX_TRACE(CALMLogger::GetModuleLogger(ModuleName),message );
}
return S_OK;
}
哪个EXE正在加载您的COM对象,并且LicEnf.dll与EXE在同一目录中?您是否尝试使用LicEnf.dll的完全限定路径?thnx。我这样做并工作了。为什么即使所有的dll和EXE都在同一路径中,也需要完整路径?我想我应该能够仅用文件名调用。