Winapi 从ATL COM插件调用LoadLibrary

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

嗨 我有一个基于ATL的COM插件,还有另一个我想使用的第三方库。它不是COMDLL,在C++中实现。 有关第三方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;
}
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都在同一路径中,也需要完整路径?我想我应该能够仅用文件名调用。