草庐IT

loadlibrary

全部标签

c - 防止过多的 LoadLibrary/FreeLibrary

我正在编写一个代理库(称为库A),它只是与系统上可能存在或不存在的另一个DLL(称为库B)的接口(interface)。这个想法是程序将链接到这个库A而不是原始库B;如果系统上没有安装库B,库A将处理错误。所以一个典型的代理函数看起来像这样:intfunction(intarg1,intarg2){HINSTANCEhinstLib;UINTerrormode=SetErrorMode(SEM_FAILCRITICALERRORS);SetErrorMode(errormode|SEM_FAILCRITICALERRORS);hinstLib=LoadLibrary(TEXT(ORIG

c++ - 在 dllmain()/DLL_PROCESS_ATTACH 中允许实例化 com 对象?

在DLLMAIN()/DLL_PROCESS_ATTACH中加载DLL可能会导致问题。但是COMObjects可以使用e.q.实例化。CoInitialize()/CoCreateInstance()?编辑:问题是:在这种情况下,创建COM实例会导致类似的错误,例如加载DLL吗?在我看来,加载DLL和创建COM实例在某种程度上是相似的。 最佳答案 我不确定你从哪里得到这句话,但听起来不对。永远不要将任何重要的代码放入DllMain中。特别是调用LoadLibrary的代码。许多WindowsAPI会在后台调用LoadLibrary,

java - 如何配置 Eclipse 项目库以在 Windows 和 Linux 上编译?

这是一个简单的OpenGL应用程序。问题是,JOGL需要本地库,我需要设置“本地库位置”,这对于Windows和Linux是不同的。是否可以在平台之间共享项目设置?我想让工作区设置过程像“从SVNcheckout、编译、运行”一样简单。 最佳答案 如果只是Windows和Linux,您可以将它们放在同一个文件夹中,如jflemm所述。它起作用的原因是因为System.loadLibrary()的定义在Java中:loadLibrarypublicstaticvoidloadLibrary(Stringlibname)Loadsthe

c++ - LoadLibrary貌似加载错误的DLL

我在使用Windows上的LoadLibrary时遇到了一个奇怪的问题。首先是一些背景。这个应用程序依赖于Qt,而Qt被拆分成几个库。我正在尝试升级Qt的版本,但不会破坏任何人。较新的Qt库向后兼容旧的。这意味着如果加载新版本,则使用旧版本构建的应用程序可以运行。反之则不然——如果加载旧版本,使用新版本构建的应用程序将缺少符号。QtDLL位于特定于版本的目录中(比如c:\qt\qt-4.5.2\lib和c:\qt\qt-4.8.1\lib作为示例)。大多数开发人员在他们的PATH中还有一个公共(public)目录,其中包含我们使用的所有第三方库的“当前”版本(称为c:\common\l

C++ - LoadLibrary() 是否实际链接到库?

我正在使用Code::Blocks并且讨厌手动链接DLL。我找到了LoadLibrary()功能,我想知道它是否像.a一样工作或.lib文件会。这个功能是这样工作的吗?如果没有,我可以通过编程方式(如果有的话)做什么来链接DLL,而不必通过执行Project来链接DLL。方法? 最佳答案 LoadLibrary将请求的库(以及它需要的所有库)加载到进程的地址空间中。为了访问该库中的任何代码/数据,您需要找出新加载的内存区域中的代码或数据地址。您需要使用GetProcAddress.此过程与在构建时添加库之间的区别在于,对于构建时库,

windows - mylibrary.dll_unloaded 出现 BEX64 错误

我有一个使用LoadLibrary动态打开DLL(mylibrary.dll)的可执行文件。当应用程序完成时,它崩溃了。浏览错误报告,结果发现它给出了一个事件类型BEX64。其中一个参数是mylibrary.dll_unloaded。剩下的就是一堆地址。有谁知道这意味着什么以及问题的可能来源是什么?我可以访问所有相关代码的源代码。 最佳答案 我前段时间遇到了同样的问题。当我在退出时调用FreeLibrary()时,程序崩溃了。原因是一个正在运行的线程,它是由我的图书馆启动的。在调用FreeLibrary()之前检查库中是否有任何正在

java, System.loadlibrary ("someDLLFile") 获取未统计的链接错误

我已经将一些JNIHook编写到C++库中,并为我的Java服务器项目创建了一些DLL文件。假设DLL和jar文件位于“C:/server”下的同一文件夹中我正在使用以下方法访问这些DLL文件:System.loadLibrary("someDLLFile");在需要C++代码的类中。我遇到的问题是,当我在自己的机器上运行这个服务器时,无论我将“服务器”文件夹放在哪里,一切都正常。但是当我把它交给同事测试时,他们不断得到:java.lang.UnsatisfiedLinkErrornosomeDLLFileinjava.library.path我希望DLL文件与jar文件位于同一文件夹

c++ - LoadLibrary A 在哪里寻找文件?

我的代码使用LoadLibraryA("someDLL.dll");它开始搜索文件someDLL.dll的路径是什么?另一个问题:LoadLibraryA函数是否区分大小写?我的意思是如果我有SomeDLL.dll,它不会加载它? 最佳答案 MSDN库文章Dynamic-LinkLibrarySearchOrder指定启用SafeDllSearchMode时桌面应用程序的搜索顺序,这是从WindowsXPSP2开始的默认设置:Thedirectoryfromwhichtheapplicationloaded.Thesystemdir

windows - 为什么加载 dll 不需要完整的文件路径?在什么情况下此功能会有用?

为什么Windows在调用LoadLibrary时不需要完整的文件路径,或者对于带有已注册DLL的CLSID等。在什么情况下有人会受益于不得不退回到DLL搜索顺序来查找dll?我的意思是,%SystemRoot%或%ProgramFiles%等变量可以将您带到适当的文件夹,而.\会让您留在当前目录中。那么为什么要含糊其词? 最佳答案 对于与GetProcAddress()的显式链接,我认为应该尽可能使用DLL的绝对路径。对于与.lib文件的隐式链接,必须在链接时确定DLL的名称,这排除了绝对路径。最安全的做法是将DLL放在与可执行文

windows - 调用 LoadLibrary(...) 失败,Win32 错误 0n126 使用 Windows 调试器工具 windbg; w3wp.exe IIS 工作进程故障

我正在使用windbg分析来自转储文件来源的单独计算机上的内存转储。在该工具的命令行中,我输入了以下内容:.loadbyw3corew3core这是错误:调用LoadLibrary(c:\windows\system32\inetsrv\w3core.dll)失败,Win32错误0n126“找不到指定的模块。”请检查您的调试器配置和/或网络访问权限更新:我创建转储文件的进程是w3wp.exe。我认为这是针对IIS的。这是IIS工作进程。所以,w3core.dll一定与IISWorkerProcess有关。为了回顾我的步骤,我使用了调试诊断工具来监视计算机A上特定进程的崩溃。(计算机A正