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

.net - .NET DLL 和线程/不同的实例

假设我有一个带有“B”类和“C”函数的 .NET dll。

然后我有一个引用 dll 的多线程 .NET 程序。

每个线程实例化类'B'并调用函数'C'。实例化后,类“B”在堆上分配它自己的所有变量。这些变量由函数“C”使用。

这是否会创建该类的不同实例(即在主程序的每个线程中调用函数“C”是否安全),或者我是否必须以某种方式动态加载 DLL。

(换句话说,.NET DLL 的行为是否类似于 Win32 LoadLibrary 函数(引用计数),您必须为一个 dll 指定不同的名称,然后加载这些名称,以创建不同的实例。)

0 投票
3 回答
1703 浏览

c# - 将 cygwin 中使用 GCC 编译的 C DLL 加载到 C#.NET 应用程序时发生奇怪的崩溃

我尝试将在 cygwin 中使用 GCC 编译的简单 DLL 加载到 C#.NET 应用程序中。DLL 看起来像这样

函数 bar() 只返回 42。

我编译并链接了 DLL

现在我想将这个超级简单的 DLL 加载到 C# WinForms 应用程序中。

现在奇怪的是:有时它起作用,有时它不起作用。当它不工作时,它会在加载 foo.dll 时崩溃。我在调试模式下运行它,但我什至没有得到异常。调试器就像我自己停止一样停止!

我还尝试在加载 cygwin1.dll 的同一堆栈框架中加载 foo.dll。一样!

任何提示为什么会发生这种情况以及我可以做些什么来使它工作?

更新 1:我们使用最新的 cygwin 和 Visual Studio 2010。

更新 2:假设它必须与时间和垃圾收集有关。在我看来,加载 cygwin1.dll 和加载 foo.dll 之间的时间很重要。两个 LoadLibrary 调用之间的时间越短,它似乎就越有可能起作用。

更新 3:如果加载 foo.dll 第一次成功,它总是在会话期间成功。我可以随心所欲地单击 button1。

注意: LoadLibrary("foo.dll") 不会简单地加载 foo.dll 失败。那会很好。我崩溃了,调试器停止工作。甚至没有抛出异常。而且它并不总是崩溃有时它有效!

0 投票
1 回答
4074 浏览

delphi - Delphi loadlibrary() 中的错误

我让我的软件用户有机会从 openfile 对话框中选择 dll。(所以我的用户可以从我的网站下载 dll 并将其与主项目一起使用)。一切正常,它甚至可以找到我提供的 dll 或选择了无效的 dll。但是如果用户选择重命名的文件(例如:重命名为 apple.dll 的 apple.txt 文件),问题就会出现。我输入了这样的代码

试试 dllHandle := LoadLibrary( pwidechar(openfiledialog1.filename)) ;

catch { 如果不是 dll 则显示消息(但它可以是任何 dll,它会检查这是我的 dll 或稍后的第 3 方)}

结尾;

delphi 显示的错误消息是“选择了错误的库图像”

但是如果用户选择了无效的 dll,try catch 将不起作用,它会显示自己的错误消息并触发。

谁能帮助我,我正在使用delphi 2009

0 投票
5 回答
4246 浏览

winapi - LoadLibrary() 调用中的访问冲突

在 LabVIEW 中调用 DLL 时遇到访问冲突。我们将 DLL 称为“extcode.dll”。我没有它的代码,它来自外部制造商。

在 Windbg 中运行它,它停止并显示以下消息:

调用堆栈是:

请注意,extcode.dll 的依赖项是在访问冲突之前加载的。

这种情况是随机的,但是当它发生时,所有后续尝试都会导致它。

代码是一个简单的 LabVIEW 函数调用 DLL 中的函数,原型非常简单int function(void)(我检查了调用约定和错误检查级别的每个组合。

在其他环境(.NET 和 C)中调用该 DLL 时运行良好。

我发现这RtlFindClearBitsAndSet与位数组操作有关

它让你思考什么?您认为这是 extcode.dll、LabVIEW 还是 Windows 中的问题?

PS:我在 Windows 7 64 位上使用 LabVIEW 2010 64 位(而 extcode.dll 是 64 位)。我没有设法在 32 位系统上重现它。

11/18 编辑

我最终制作了一个包装 DLL 的独立 exe;LabVIEW通过管道与其通信。它工作得很好,但我仍然不明白为什么将 DLL 加载到 LabVIEW 中会崩溃。

0 投票
3 回答
592 浏览

c++ - COM 对象 DLL 加载问题

我正在开发一个用作大型应用程序插件的 Qt DLL。该 DLL 依赖于其他不位于同一文件夹中的 DLL,因此只有在当前工作目录设置正确时才会加载(大型应用程序在调用LoadLibraryDLL 之前会这样做)。我无法控制这种行为。

我被要求向这个插件添加一个简单的 COM 对象,但我现在遇到的问题是,除非当前工作目录设置正确,否则 DLL 无法注册或由 3rd 方应用程序使用 - 因为任何LoadLibrary调用由于缺少依赖项,插件失败。显然我无法控制 3rd 方应用程序使用的当前工作目录,并且在这个阶段我不允许修改 PATH 以确保可以找到依赖项。

我曾尝试使用/DELAYLOAD依赖的 DLL,但这失败并出现“由于导入数据符号而无法延迟加载 foo.dll...”错误。同样,我不能轻易改变这些依赖 DLL 的使用方式。

目前,我认为唯一的解决方案是将 COM 对象移动到一个独立的 DLL 中,该 DLL 不依赖于其他任何东西,但我面临找到解决方案并将 COM 对象留在插件 DLL 中的压力。我看不出这是怎么可能的,所以我想看看其他人是否有任何想法。当第 3 方应用程序调用我的插件时,某种形式的系统范围SetDllDirectory调用会有所帮助,或者一些注册表黑客可以设置工作目录。LoadLibrary

0 投票
3 回答
5189 浏览

.net - 多次加载 Dll 以允许 .Net 中的多线程

我的 .Net 程序使用 fortran Dll 来执行数学函数(Arpack,解决特征模式)。我相信 fortran 包含静态变量,通常不是线程安全的。而且它非常复杂,可能需要大量的努力才能使其线程安全。Dll 不是很大(700K),所以我只想加载它很多次(比如 4 次,或者可能 8 次)以允许线程同时工作。有人知道我该怎么做吗?我听说 LoadLibrary 在多次调用时总是返回相同的句柄。因此,就目前而言,我唯一的解决方案是在磁盘上保存我的 Dll 的多个副本(Arpack1.dll、Arpack2.dll 等)并根据需要加载它们。相当可怕。

有任何想法吗?

尤安

0 投票
1 回答
652 浏览

android - 安卓链接错误

我正在运行 Ubuntu 10.10

我没有使用 NDK

我在 DS-5(ARM 的开发工具集,http: //www.keil.com/arm/ds5/ )中编译了我的 ARM 共享库。当我将它们放在 libs/armeabi 下并调用 System.loadLibrary() 时,它找不到它们。

这是课程:

库的确切名称是 libAddSub.so

日志猫:

0 投票
6 回答
11281 浏览

windows - 从 DllMain 调用 LoadLibrary

MSDN 说:

它不能调用 LoadLibrary 或 LoadLibraryEx 函数(或调用这些函数的函数),因为这可能会在 DLL 加载顺序中创建依赖循环。这可能导致在系统执行其初始化代码之前使用 DLL。

我试图LoadLibrary从 DllMain 打电话,但什么也没发生。

我看到的唯一问题是加载的 DLL 将在我的 DllMain 的其余部分执行之前使用我的 DLL 中的函数。

为什么我不能在 DllMain 中调用 LoadLibrary?

编辑:

好的,我意识到我不能仅仅因为我必须像其他信徒一样相信MSDN(我在那里看到了一些错误的东西,但我也应该忘记它们)。
并且因为在较新版本的 Windows 中可能会发生某些事情(尽管过去十年没有任何改变)。

LoadLibrary但是任何人都可以显示一个代码来重现在DllMain 中调用时会发生什么不好的事情吗?在任何现有的 Windows 操作系统中?
不仅仅是在另一个内部调用一个单例初始化函数,而是LoadLibrary在 DllMain 中调用?

0 投票
1 回答
4116 浏览

python - Python ctypes.cdll.LoadLibrary 在 2.6.5 和 2.7.1 之间的工作方式不同

我有一个包含 Python 版本 2.6.5 和 2.7.1 的系统,我注意到一个 LoadLibrary 工作,另一个没有。

在工作 2.6.5 土地上:

有谁知道一个很好的方法来弄清楚为什么 python 2.7.1 不起作用?

0 投票
1 回答
426 浏览

windows - 强制从给定目录静态加载 dll

在我们的应用程序中,我们动态加载一个 dll 文件,该文件又与其他 dll 具有静态绑定。

到目前为止,所有这些 dll 都在我们的应用程序文件夹中。从现在开始,我们要将这些 dll 移动到一个目录结构中。应从哪个文件夹加载 dll 将在运行时决定。(版本控制/动态更新...)

问题 1:强制动态加载库在给定文件夹中查找静态加载库的最佳方法是什么?

问题 2:如果旧版本的库遗留在那里,我们如何防止它从应用程序文件夹加载静态库?

(顺便说一句,这是一个win32应用程序......)