问题标签 [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.

0 投票
1 回答
231 浏览

api - GetProcAdress 总是返回零

我遇到了一个非常神秘的问题。使用函数 GetProcAddress,我总是得到零。

无论我使用“CreateProcess”、“LoadLibrary”还是其他东西,这条线总是返回零。为什么会这样?

功能声明:

0 投票
1 回答
6509 浏览

visual-c++ - 加载库失败;GetLastError 没有帮助

我有一个从 Visual Studio 2003 .NET 转换为 Visual Studio 2010 的项目。它不是 .NET 项目;它不是 .NET 项目。它是 Visual C++(非托管)。

DLL 会引入额外的 DLL。如果我将可执行文件与此 DLL 链接,则可执行文件会在 DLL 初始化期间终止。(我可以说,有正在调用的静态对象的构造函数,我可以看到它们的操作。)我已经从我的路径中删除了所有 VS 2010 创建的 DLL,除了其中一个会导致错误。用 VS.NET 创建的版本替换那个可以让程序运行。

由于我没有得到任何有用的信息,我决定编写一个不直接链接到 DLL 的测试应用程序,而是使用 LoadLibrary 来加载库。我的想法是我可以使用 GetLastError() 来帮助解决库的问题。不行;我收到一个错误代码 -529697949,这根本不是 Windows 错误代码!(如果我将 DLL 更改为 VS.NET 创建的版本,程序会正确加载 DLL。)

我使用 Dependency Walker (www.dependencywalker.com) 检查 DLL,它告诉我“找不到至少一个延迟加载依赖模块”,突出显示 IESHIMS.DLL 和 WER.DLL。我没有看到该工具的其他错误。在 VS.NET 创建的 DLL 上运行它会显示相同的两个警告,所以我认为这是一个红鲱鱼。

最后,我运行 Process Monitor (sysinternals.com) 来监控测试程序,查看所有 Path 中包含字符串“dll”的条目。我在这个列表中没有看到任何特别有用的信息——不知道为什么 DLL 无法加载。

如果我将 LoadLibraryEx 与 DONT_RESOLVE_DLL_REFERENCES 一起使用,则库会加载,所以这看起来确实是一个依赖问题,这就是为什么我很惊讶依赖遍历器没有特别有用的原因。

我在 Windows 2008 R2 和 Windows 2003 上试过这个;相同的行为。

有什么建议么?

0 投票
2 回答
659 浏览

windows - 从文件中的偏移量加载库

我正在编写一个可编写脚本的游戏引擎,为此我有大量执行各种任务的类。引擎的大小正在迅速增长,因此我想到将大型可执行文件拆分为 dll 模块,以便仅包含游戏编写者实际使用的组件。当用户编译他们的游戏(也就是说他们的脚本)时,我希望正确的 dll 成为最终可执行文件的一部分。我已经有相当多的覆盖数据,所以我想我也许可以将 dll 存储为这个块的一部分。我的问题归结为:

是否可以欺骗 LoadLibrary 以某个偏移量开始读取文件?这将使我不必将 dll 提取到一个不干净的临时文件中,或者完全取消自动包含 dll 并简单地指示我的用户将 dll 与他们的游戏一起打包。

最初我想采用“从内存中加载 dll”的方法,但出于可移植性的原因拒绝了它,只是因为它看起来像一个可怕的 hack。

有什么想法吗?

亲切的问候,

菲利普·班尼法尔

0 投票
5 回答
26774 浏览

android - Android 加载原生库

我正在尝试加载使用独立 NDK 工具链构建的库。

我构建了 libGLmove.so 并将其放在我的 Eclipse 项目的 libs/armeabi 中

然而,调用System.loadLibrary("GLmove")抛出一个UnsatisfiedLinkError

关于如何解决问题或让 Android 找到我的库的任何想法?ndk-build 构建后如何打包库?

编辑:确切的编译标志是:

/Users/thomas/Documents/android-ndk-r5b/toolchains/arm-eabi-4.4.0/prebuilt/darwin-x86/bin/arm-eabi-g++ --sysroot=/Users/thomas/Documents/android-ndk -r5b/platforms/android-8/arch-arm -march=armv7-a -mfloat-abi=softfp -mfpu=neon -Wl,--fix-cortex-a8 -fno-exceptions -fno-rtti -nostdlib -fpic -shared -o GLmove.so -O3

0 投票
1 回答
2172 浏览

winapi - LoadLibrary 失败并且依赖walker 没有帮助

我试图为 QtSql 使用 QOCI 插件,直到遇到一些问题: Why QOCI plugin is not working

然而事实证明这是一个库加载问题(至少我是这么认为的),所以我决定改变这个问题的主题,因为它是一个新问题。

我有一个 dll 文件(称为 qsqloci4.dll) 当我尝试使用 LoadLibrary 加载它时,它失败并且 GetLastError 返回 ERROR_MOD_NOT_FOUND。当我尝试使用 LoadLibraryEx 加载它并且第三个参数是 DONT_RESOLVE_DLL_REFERENCES 时,它加载成功(不返回 NULL)。

所以,我认为这是一个依赖问题。我用依赖walker打开了dll文件,有2个文件找不到:QtCore4.dll和QtSql4.dll。但是,这些文件在应用程序的工作目录下,其他依赖于这些dll的dll文件(如qsqlpsql4.dll)被成功加载。

其他dll(由依赖walker定位)是:

  • oci.dll :与 QtCore4.dll 和 QtSql4.dll 位于同一文件夹中,这意味着我的应用可以访问它
  • kernel32.dll:我相信我的应用程序最容易找到的 dll
  • msvscr80.dll : 其他使用这个的dll文件可以成功加载。

这是我的问题:给定依赖walker说:“除了qt之外,你有所有的dll”,我确信我有qt dll,还有什么其他原因导致LoadLibrary因ERROR_MOD_NOT_FOUND而失败?

0 投票
3 回答
6616 浏览

winapi - C++/CLI:将 LoadLibrary + GetProcAddress 与 exe 一起使用

到目前为止,我有某种插件机制,其中我使用 LoadLibrary 和 GetProcAddress 加载 dll 以创建一个具体对象并返回一个公共接口。在我决定其中一个 dll 应该是 exe 之前,这一直很好。

LoadLibrary 的文档说它也可以用于 exe,所以我试了一下。exe 加载时没有错误,如 GetProcAddress。但是当我尝试调用我的具体对象的构造函数时,我遇到了访问冲突。

我认为这会发生,因为加载 exe 不会加载它使用的所有 dll。所以我尝试使用 LoadLibrary 加载它们,但我得到了同样的错误。对此有何建议?

这是我的代码(混合 C++/CLI):

(AssemblyLoader::GetInstance().LoadAssembly 只是 ::LoadLibrary 的包装器)

0 投票
2 回答
2906 浏览

c++ - 从 MFC DLL 显示对话框

我加载了表单,但只有没有功能的按钮

那么我如何加载表单的完整功能而我没有 DLL 源代码

0 投票
1 回答
217 浏览

windows - 用于 IE 的基于 ATL 的 HBO 插件:其他机器上缺少库

我正在为 Visual Studio 2010 中的 Internet Explorer 编写一些 HBO。在我的开发机器上一切都很好。要注册 DLL,我使用系统工具 regsvr32,如下所示。

但是,当我尝试在其他机器上执行相同操作时,我收到一条错误消息,指出系统无法加载 DLL 模块。我很确定我的扩展 DLL 的路径是正确的,所以我相信系统不满足其他依赖项。在 VS 中,我以“发布”模式构建我的插件,因此它应该包含在其他地方运行的所有必要内容。我还将 /MD 更改为 /MT(朋友的建议 - 遗憾的是它不起作用)。

我一直在根据其他信息搜索系统事件日志,但没有成功。那我该怎么办?我的意思是如何检查我应该在另一台机器上拥有哪些库(或者可能很明显 - 然后告诉我名称)。

编辑:我找到了一个解决方案,也许有人会发现它有帮助:在 Visual Studio 中将不带引号的“atl.lib”添加到链接的附加依赖项中,一切都应该可以正常工作。

问候

0 投票
1 回答
5119 浏览

assembly - ASM:LoadLibrary 和 GetProcAddress

我第一次使用 ASM,在我继续之前,我需要知道我在写这篇文章时是否理解了所有内容。当前代码如下所示:

0xDEADBEEF 只是我稍后会修补的虚拟地址。有什么问题吗?=)

0 投票
4 回答
7561 浏览

delphi - DLL中的Delphi接口

使用德尔福 XE。

当尝试从 DLL 访问 Delphi 接口对象时,如果我尝试动态地而不是静态地执行它会失败。

dll中的接口单元实现了返回接口实例的函数。静态链接时,输入函数时结果为零,一切正常。动态加载时,结果为非零,因此当对结果的赋值完成时,IntFCopy 代码将其视为非零,因此尝试在赋值之前释放它,这会引发异常。

任何见解将不胜感激。

DLL 包括 testinterfaceload_u 并导出 testInt:

testinterfaceload_u 是定义接口和简单类实现的单元:

这是一个加载dll并调用testInt函数返回接口的控制台应用程序: