代码之家  ›  专栏  ›  技术社区  ›  SmacL

我是否可以捕获与未找到的.DLL文件相关的异常

  •  2
  • SmacL  · 技术社区  · 16 年前

    我有一个第三方组件,包括一个.LIB和.DLL文件。为了使用这个组件,我将.LIB链接到我的C++程序中,并用应用程序分发.dll。提供的功能非常具体,并且只与我的一小部分用户相关,但是分发.DLL需要支付许可证费用。

    理想情况下,我只想从发行版中排除.DLL,但如果这样做,就会出现错误 '此应用程序无法启动,因为找不到XXXXX.DLL。重新安装应用程序可能会解决此问题' . 这是我可以在代码中捕获和处理的异常吗?或者,我是否可以延迟加载.DLL,直到尝试调用提供的特定功能,然后再处理它,或者只是检查.DLL是否存在并相应地执行操作?

    环境指数分别为2003年和2008年。

    4 回复  |  直到 16 年前
        1
  •  5
  •   Totonga    13 年前

    在与dll链接后,无法停止绑定。 运行时的dll。

    Dll解析在exe开始运行之前完成。 代码可能看起来像那样。

    HINSTANCE lib = LoadLibraryEx("C:\dlls\thirdparty.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
    if(0 != lib) {
        // Dll is present so use it
        typedef  CObj ( __cdecl *tFunction ) (const wchar_t*, const int&);
        tFunction functionEntry = (tFunction)(GetProcAddress( lib,"EntryFunction"));
    
        assert(0 != functionEntry);
        // call the function
        CObj obj = functionEntry(L"Hello", 1);
    }
    else {
        // dll not present
    }
    

    更新:请确保使用dll的完整路径,以确保没有任何具有此名称的dll被拉入。

        2
  •  5
  •   Sofahamster    16 年前

    Visual Studio支持 delay-loaded DLLs

        3
  •  3
  •   sergiom    16 年前

    可以使用 API函数 GetProcAddress() 在应用程序需要调用的DLL导出的每个函数上。

        4
  •  3
  •   Kirill V. Lyadvinsky    16 年前

    你可以用 LoadLibrary 函数显式加载DLL并检查结果。如果成功,则使用 GetProcAddress 找到你的 CreateMyInterfaceImpl 功能。否则,请使用接口的假实现,或者根本不使用它。

    推荐文章