问题标签 [loadlibrary]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
dll - LoadLibrary() -“无效的存取存储器位置 (998)”
首先让我说我加载了一个 DLL 就好了。但是当我去加载第二个 DLL 时,它总是会出现“无效的访问内存位置 (998)”错误。
在我的项目中,DLL 基本上包含运行 AI 所需的代码。我构建的另一个应用程序允许您编写简单的代码,然后在后台编译源代码并使其可用于“游戏”。
基本上我可以加载一个 AI (DLL) 并观察它的工作。下次我向它发送命令以加载新的 AI(单独和不同的实体)时,它会失败。我在整个过程中使用了新变量,所以它不应该踩到其他模块。
每个 DLL 看起来都差不多,因为它们都是以基本相同的方式构建的。(DLL 仅由一堆结构和一个函数组成)。我在想,也许 DLL 中有一些共同点使它以某种方式共享同一内存的一部分,但我不知道。
我希望我可以向您展示 DLL 源代码,但它不在这台机器上。
如果您有任何想法,请提前致谢!
-迈克尔
编辑:998 错误的正确名称是“ERROR_NOACCESS”。对于那个很抱歉。
c++ - 挂钩 LoadLibrary API 调用
我想加载与应用程序工作目录中不同版本的 DLL。为此,我需要挂钩 LoadLibrary 调用,以便在应用程序调用加载 DLL 时,我可以透明地用该 DLL 的较新版本替换它。我尝试使用 NCodeHook 并在我的 DLL 中有以下代码,我使用 NInjectLib 将其注入应用程序,但它在加载 kernel32.dll 时崩溃。任何人都可以告诉我这是注入呼叫的正确方式还是有其他选择。
winapi - OCX 文件上的 LoadLibrary 在 Windows 7 x64 中失败
我需要从用旧版 C++ Builder 编写的旧 Windows 应用程序中打开一个 html 帮助文件。HtmlHelp 是通过 HtmlHelp.ocx 加载的,我是通过 LoadLibrary 加载的。
这多年来一直运行良好,但在 Windows 7 x64 中不再适用。在 Windows7 x86 下它也可能会失败,但我没有任何具有此操作系统的计算机,因此我目前无法尝试。
我正在动态加载 hhctrl.ocx,如下所示:
我检查了 Windows 7 系统上是否存在 %SystemRoot%\System32\hhctrl.ocx 并且确实存在。
为什么通过 LoadLibrary 加载它会失败?我该如何解决这个问题?
编辑: GetLastError 说(用德语,所以我只是在翻译):“找不到文件。” 但我调试了函数,路径是“%SystemRoot%\System32\hhctrl.ocx”,文件确实存在。
此外,由于两个答案指向 64 位与 32 位问题的方向:我的应用程序是在 C++ Builder 5 中编译的 32 位可执行文件,因此如果我没记错的话,它应该是 32 位进程。还是我错误地假设?
windows - LoadLibrary 静态/全局变量和线程
假设我有一个具有以下静态/全局的 DLL:
除了 ClassA 的实现之外,它还包含一个“常规”ClassB,如果尚未构建 ClassA,它将无法正常工作(这就是为什么我将 ClassA 设为静态/全局的原因)。
在 Windows 中,我相信 DLL 加载器会在调用 ClassB 的构造函数时加载这个 DLL,对吗?至此,ClassA 将被构造,然后 ClassB 的构造将随之而来。如果出现第二个线程并构造 ClassB,则不会构造 ClassA,因为它已经构造好了。
现在,我的问题是——如果 ClassB 由两个线程同时构造会怎样。所以线程 1 将开始构造 ClassA。线程 2 会等到 ClassA 完全构造好后再执行 ClassB 的构造函数吗?
换句话说,LoadLibrary() 是否使用 CriticalSection 来确保 DLL 的静态/全局变量的线程安全初始化?我的预感是“是的”,但我似乎找不到任何文件说一种或另一种方式。
c++ - 有没有更好的方法在 C++ 中加载 dll?
现在我做这样的事情,如果我最终有很多我想在我的 DLL 中引用的函数,这似乎很混乱。是否有更好、更简洁的方法来访问函数,而无需为每个函数定义创建 typedef,以便正确编译和加载函数。我的意思是函数定义已经在 .h 文件中,我不应该在加载函数后重新声明它们(或者我是吗?)有没有比使用 LoadLibary 更好的解决方案?如果有一种方法可以在 Visual Studio 2005 项目设置中执行相同的操作,我不一定需要该功能。
BHannan_Test_Class.h
BHannan_Test_Class.cpp
dll_test.cpp
dll - 基于可变参数调用任何 dll 函数
我在结构中有以下项目:
- Dll 名称(绝对/相对路径)
- dll 中的函数名称
- 参数数量
- 参数类型和值的数组
有了这些信息,我需要加载 dll 并调用函数。
要加载 dll,我会使用 LoadLibrary。
要获取函数的地址,我会使用 GetProcAddress。
调用函数。
要卸载 dll,FreeLibrary
由于函数的参数数量是动态的,我不确定如何将参数传递给函数。
谁能提供一些有关如何将参数传递给 dll 函数的详细信息?
谢谢和问候, V Karthick
asp.net - 非托管 dll 的 LoadLibrary 在 ASP.NET 应用程序中返回 IntPtr.Zero
我正在尝试调用 LoadLibrary 并在 ASP.NET 应用程序中加载 Delphi dll。在我的生产机器上一切正常(使用 VS 集成服务器),但是当我将它放在目标服务器上时,LoadLibrary 返回 IntPtr.Zero。File.Exists(libraryName)
返回真。可能是什么问题?
c++ - 如何在 C++ 中使用带有 LoadLibrary 的 COM DLL
首先,COM 对我来说就像黑魔法。但是我需要在我正在处理的一个项目中使用 COM dll。
所以,我有一个我正在开发的 DLL,我需要一些在单独的 COM DLL 中可用的功能。当我使用 Depends.exe 查看 COM DLL 时,我看到了 DllGetClassObject() 和其他函数之类的方法,但没有一个我感兴趣的函数。
我可以访问 COM DLL(旧版)源代码,但它一团糟,我宁愿像一个不知道里面发生了什么的大黑盒子一样使用二进制形式的 COM DLL。
那么,如何使用 LoadLibrary 从我的代码中调用 COM DLL 函数?是否可以?如果,是的,你能给我一个如何做的例子吗?
我正在为这个项目使用 Visual Studio 6。
非常感谢!
c++ - 依赖于其他 DLL 的插件 DLL
我正在编写一个 DLL 以插入另一个(第 3 方)应用程序。DLL 将需要依赖另一组 DLL(出于许可原因,我无法静态链接)。
我希望我的 DLL 可以“xcopy-deployable”到任何目录。我也不想要求将此目录添加到路径中。
如果我只是以通常的方式构建 DLL,Windows 将拒绝加载 DLL,因为它找不到当前进程旁边的 DLL。
有没有什么好的选择可以帮助 Windows 找到 DLL?
回答一些问题:
- DLL 是用 C++ 编写的。
- 额外的 DLL 是 QT-dll。
- 我想将额外的 DLL 放在与我的插件 DLL 相同的文件夹中。我可以从中获取该文件夹的名称
GetModuleFileName
。 - 该应用程序是 Firefox,DLL 是一个 PKCS#11 安全模块。
- 应用程序使用 DLL 的完整路径加载 DLL(用户在安装插件时提供它)。
- 要求将 DLL 放置在 System32 中或应用程序旁边是可行的,但它有点混乱,可能会导致卸载程序出现问题。
LoadLibrary
当然会起作用,GetProcAddress
但在我的情况下并不可行。我在其他 DLL 中使用了数百甚至数千种方法。我真的需要使用导入库。
我曾考虑SetDllDirectory
在 DllMain 中使用延迟加载的 dll。有没有人尝试过这样的事情?
dll - 在 64 位应用程序中加载 32 位 DLL 库
有没有办法加载 32 位 DLL 库(与 LoadLibrary 的用法相同)我想将该函数与 GetProcAddress 一起使用。
我查看了 WOW,但它似乎没有提供该功能。该功能应该存在,因为像 DependencyWalker 这样的工具能够读取 32 位 dll 的符号,即使它是 64 位的。
谢谢