问题标签 [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 投票
3 回答
7020 浏览

matlab - using dll in matlab

i have a problem to using a dll fortran in matlab. i couldn't use a dll ,that is built by fortran, in matlab. i use "loadlibrary" instruction in matlab but the error is related to header files. what is header files?? please give me more information to load a dll fortran in matlab and call it.

0 投票
2 回答
1364 浏览

dll - 可再发行编译器 - MS Visual Studio 的 DLL

我正在为我的高级项目制作一个编程学习游戏,我正在寻找一个可以编译 DLL 的编译器,该 DLL 然后可以动态加载到 Visual Studio 2008 C++ 应用程序中。

这里的重要思想是编译器是可再发行的。如果 VS 是可再发行的,我会使用它。

到目前为止,我在使用 MinGW 方面取得了一些成功,但这种成功是有限的。目前,我一次只能加载一个 DLL 并工作。当我尝试加载第二个时,VS C++ 应用程序因访问冲突错误而崩溃。

我已经能够毫无问题地加载在 VS 本身中编译的两个 DLL,所以它让我相信这是 MinGW 特有的东西,它是 DLL,以及它们如何与 LoadLibrary() 等交互。

我已经在这个问题上工作了很长一段时间,我很沮丧。如果有人知道您知道可以代替 MinGW 工作的不同编译器,或者如果您看到这个问题,也许您知道为什么第二个 DLL 会导致它崩溃。我确信它与每个 DLL 以某种方式踩到另一个有关,但我不知道那会是什么或如何找出来。

这可能是我编译 DLL 或加载它的方式;我不知道。

非常感谢您的反馈,谢谢!

编辑:这些是对 g++ 和 dlltool 的简单调用,用于创建 DLL http://pastebin.com/f675df4b0

这是我的一个 DLL 的来源。 http://pastebin.com/f5c062611

这是我的 C++ 应用程序中用于加载 DLL 的代码。 http://pastebin.com/f52f94a18

-迈克尔

0 投票
2 回答
5726 浏览

glassfish - Java Web 应用程序不能使用本机库 (.so)

技术摘要:我正在开发一个部署在 GlassFish v3 上的 Java Web 服务,该服务在 CentOS 5 上运行。

我的 Web 服务使用本地库 (.so) 提供的功能。本机库工作正常,但是我在正确配置环境以加载本机库方面运气不佳,但不受 Web 应用程序重新部署的影响,无需重新启动应用程序服务器。

到目前为止我所做的是:

最初我在Web服务代码中加载了库(静态{System.load(path/to/libabc.so)};),所有路径都设置正确,并且工作正常,直到我重新部署应用程序并抱怨该库由另一个 ClassLoader 加载。我发现本机库只加载一次。

为了尝试解决这个问题,我从 Web 应用程序中删除了库加载代码,创建了一个 Singleton 类,将其包装到 Lifecyle 模块中,将其部署到 GlassFish 共享库文件夹,然后配置 GlassFish 以在启动时运行包装器。这个想法是现在所有的 Web 应用程序都可以引用它,因为它没有绑定到一个特定的 Web 应用程序,而是由层次结构中更高的 ClassLoader 加载。

当 GlassFish 启动时,本机库已成功加载 ( linux> lsof | grep libabc.so )。但是,在我的 Web 服务 Java 代码中执行本机方法时,Web 服务代码失败并出现 UnsatisfiedLinkError。在我看来,Web 应用程序中的代码无法访问启动时加载的库。

谁能告诉我我做错了什么?

提前致谢。

0 投票
2 回答
6188 浏览

dll - LoadLibrary() 无法使用清单和私有程序集加载 DLL

我正在开发一个使用多个 DLL 的 Windows 应用程序 (EXE)。开发在 VCExpress 2005 (VC 8.0) 中,仅使用 C。

LoadLibrary其中一些 DLL 是根据 EXE 读取的配置文件 动态加载的插件/附加组件/扩展。

重要的是:应用程序必须是可移植的(即无需安装即可从 USB 闪存驱动器或类似设备运行),并且插件 DLL 可能与应用程序 EXE 不在同一文件夹中(遗留原因)。

使用 MSVC6,这很简单:编译、链接、分发 EXE 和 DLL。

使用 MSVC8,C 运行时库 (MSVCRT) 不再随操作系统分发,因此不能依赖它的安装。为了满足可移植性要求,我需要使用私有程序集。所有的 EXE 和 DLL 都嵌入了它们的清单。

我的问题:通过加载的插件 DLLLoadLibrary()找不到 EXE 文件夹中的私有程序集,因此除非Microsoft.VC80.CRT程序集安装在 winSxS 中,否则尝试加载它们会失败。

问题:如果清单从插件 DLL 中删除,一切正常。

我的问题

  1. 在问题案例中,Windows 似乎没有遵循Assembly 搜索顺序动态链接库搜索顺序。具体来说,它在加载 DLL 的路径中查找私有程序集,而不是从加载应用程序 (EXE) 的路径中。
    我试图通过将程序集与 DLL 相邻并更改当前目录(以排除与工作目录相关的情况)来验证这一点,并获得预期的行为。其他人可以确认这是LoadLibrary与 SxS 一起使用时的正常行为吗?

  2. 我是否正确假设没有清单,DLL 会退回到在 EXE 的文件夹中找到msvcr80.dll(而不是程序集清单)的非 SxS 加载顺序?Microsoft.VC80.CRT.manifest

  3. 如果我对 (1) 和 (2) 的看法是正确的,那么仅从 DLL 中排除清单会失去什么?换个说法,为什么我不应该通过排除清单来解决我的问题?

0 投票
8 回答
2867 浏览

c++ - C ++中的函数指针和未知数量的参数

我遇到了以下奇怪的代码块。想象一下你有以下 typedef:

然后,在一个函数中,我们尝试通过以下方式从 DLL 运行一个函数:

问题是,没有任何方法可以知道我们通过 LoadLibrary 获得地址的函数是否接受两个整数参数。dll 名称由用户在运行时提供,然后列出导出函数的名称和用户选择要测试的(同样,在运行时 :S:S )。那么,通过最后一行的函数调用,我们不是打开了可能的堆栈损坏的大门吗?我知道这可以编译,但是如果我们将错误的参数传递给我们指向的函数,会发生什么样的运行时错误?

0 投票
6 回答
39618 浏览

java - 加载 dll 库文件时出现问题... java.lang.UnsatisfiedLinkError: Can't load library

加载 dll 文件时,出现以下异常:

不确定问题的根本原因。谁能帮我解决这个问题。

谢谢,巴斯卡

0 投票
2 回答
7624 浏览

c++ - 从 32 位进程调用 64 位 dll 上的 LoadLibrary

我有一个 32 位 exe,当它检测到操作系统是 64 位时,它需要动态加载 64 位 dll。这可以通过 LoadLibrary 实现吗?如果没有,是否有其他方法可以实现相同的目标?

0 投票
3 回答
3074 浏览

c++ - 尝试使用 LoadLibrary 加载 DLL 并获得 R6034“应用程序尝试错误地加载 C 运行时库”

我正在编写一个加载 Winamp 输入插件的包装程序。到目前为止,我已经让它在相当多的插件上运行良好,但对于其他一些插件,当我尝试在插件的 DLL 上调用 LoadLibrary 时,我在运行时收到一条错误消息。(这似乎主要发生在 Winamp 附带的插件中。)出现一个对话框,并给我上面的错误代码和消息。例如,in_flac.dll 和 in_mp3.dll 插件(Winamp 附带)会发生这种情况。关于如何补救这种情况的任何想法?

编辑:这基本上遍历目录中的插件并尝试加载然后释放每个插件。一些插件会产生我上面提到的错误,而另一些则不会。

0 投票
3 回答
9584 浏览

delphi - Delphi LoadLibrary 找不到 DLL 其他目录 - 有什么好的选择吗?

两个 Delphi 程序需要加载 foo.dll,其中包含一些将客户端身份验证证书注入 SOAP 请求的代码。foo.dll 位于 c:\fooapp\foo.dll 中,通常由 c:\fooapp\foo.exe 加载。这很好用。另一个程序需要相同的功能,但它位于 c:\program files\unwantedstepchild\sadapp.exe 中。两个应用程序都使用以下代码加载 DLL:

它适用于 foo.exe,因为 dll 就在那里。sadapp.exe 加载库失败,所以 FOOLib 为 0,其余的永远不会被调用。因此,sadapp.exe 程序默默地无法注入证书,并且当我们针对生产进行测试时,如果证书丢失,连接是否会失败。显然,我们应该已经完全限定了 DLL 的路径。在不深入细节的情况下,直到最近,测试的某些方面才掩盖了这个问题,现在在代码中修复基本上为时已晚,因为这需要完整的回归测试,而且没有时间。

由于我们已经把自己画到了一个角落,我需要知道是否有任何我忽略的选项。虽然我们无法更改代码(对于此版本),但我们可以调整安装程序。我发现将 c:\fooapp 放入路径中是可行的。就像将 foo.dll 的第二个副本直接添加到 c:\program files\unwantedstepchild 中一样。c:\fooapp\foo.exe 将始终在运行 sadapp.exe 时运行,所以我希望 Windows 会以这种方式找到它,但显然不是。有没有办法告诉 Windows 我真的想要同一个 DLL?也许是清单之类的?这就是我正在寻找的那种“灵丹妙药”。我知道我可以:

  1. 修改windows路径,可能在安装程序中。太丑了
  2. 将 DLL 的第二个副本直接添加到不需要的stepchild 文件夹中。也丑
  3. 在我们编码和测试适当的修复时延迟项目。不可接受。
  4. 其他?

感谢您的任何指导,尤其是“其他”。我知道这个问题不一定是 Delphi 特有的。谢谢!

0 投票
4 回答
15802 浏览

c++ - 从dll加载dll?

从 dll 加载 dll 的最佳方法是什么?

我的问题是无法在process_attach上加载dll,也无法从主程序加载dll,因为我不控制主程序源。因此我也不能调用非 dllmain 函数。