问题标签 [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.
.net - .NET DLL 和线程/不同的实例
假设我有一个带有“B”类和“C”函数的 .NET dll。
然后我有一个引用 dll 的多线程 .NET 程序。
每个线程实例化类'B'并调用函数'C'。实例化后,类“B”在堆上分配它自己的所有变量。这些变量由函数“C”使用。
这是否会创建该类的不同实例(即在主程序的每个线程中调用函数“C”是否安全),或者我是否必须以某种方式动态加载 DLL。
(换句话说,.NET DLL 的行为是否类似于 Win32 LoadLibrary 函数(引用计数),您必须为一个 dll 指定不同的名称,然后加载这些名称,以创建不同的实例。)
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 失败。那会很好。我崩溃了,调试器停止工作。甚至没有抛出异常。而且它并不总是崩溃。有时它有效!
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
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 中会崩溃。
c++ - COM 对象 DLL 加载问题
我正在开发一个用作大型应用程序插件的 Qt DLL。该 DLL 依赖于其他不位于同一文件夹中的 DLL,因此只有在当前工作目录设置正确时才会加载(大型应用程序在调用LoadLibrary
DLL 之前会这样做)。我无法控制这种行为。
我被要求向这个插件添加一个简单的 COM 对象,但我现在遇到的问题是,除非当前工作目录设置正确,否则 DLL 无法注册或由 3rd 方应用程序使用 - 因为任何LoadLibrary
调用由于缺少依赖项,插件失败。显然我无法控制 3rd 方应用程序使用的当前工作目录,并且在这个阶段我不允许修改 PATH 以确保可以找到依赖项。
我曾尝试使用/DELAYLOAD
依赖的 DLL,但这失败并出现“由于导入数据符号而无法延迟加载 foo.dll...”错误。同样,我不能轻易改变这些依赖 DLL 的使用方式。
目前,我认为唯一的解决方案是将 COM 对象移动到一个独立的 DLL 中,该 DLL 不依赖于其他任何东西,但我面临找到解决方案并将 COM 对象留在插件 DLL 中的压力。我看不出这是怎么可能的,所以我想看看其他人是否有任何想法。当第 3 方应用程序调用我的插件时,某种形式的系统范围SetDllDirectory
调用会有所帮助,或者一些注册表黑客可以设置工作目录。LoadLibrary
.net - 多次加载 Dll 以允许 .Net 中的多线程
我的 .Net 程序使用 fortran Dll 来执行数学函数(Arpack,解决特征模式)。我相信 fortran 包含静态变量,通常不是线程安全的。而且它非常复杂,可能需要大量的努力才能使其线程安全。Dll 不是很大(700K),所以我只想加载它很多次(比如 4 次,或者可能 8 次)以允许线程同时工作。有人知道我该怎么做吗?我听说 LoadLibrary 在多次调用时总是返回相同的句柄。因此,就目前而言,我唯一的解决方案是在磁盘上保存我的 Dll 的多个副本(Arpack1.dll、Arpack2.dll 等)并根据需要加载它们。相当可怕。
有任何想法吗?
尤安
android - 安卓链接错误
我正在运行 Ubuntu 10.10
我没有使用 NDK
我在 DS-5(ARM 的开发工具集,http: //www.keil.com/arm/ds5/ )中编译了我的 ARM 共享库。当我将它们放在 libs/armeabi 下并调用 System.loadLibrary() 时,它找不到它们。
这是课程:
库的确切名称是 libAddSub.so
日志猫:
windows - 从 DllMain 调用 LoadLibrary
它不能调用 LoadLibrary 或 LoadLibraryEx 函数(或调用这些函数的函数),因为这可能会在 DLL 加载顺序中创建依赖循环。这可能导致在系统执行其初始化代码之前使用 DLL。
我试图LoadLibrary
从 DllMain 打电话,但什么也没发生。
我看到的唯一问题是加载的 DLL 将在我的 DllMain 的其余部分执行之前使用我的 DLL 中的函数。
为什么我不能在 DllMain 中调用 LoadLibrary?
编辑:
好的,我意识到我不能仅仅因为我必须像其他信徒一样相信MSDN(我在那里看到了一些错误的东西,但我也应该忘记它们)。
并且因为在较新版本的 Windows 中可能会发生某些事情(尽管过去十年没有任何改变)。
LoadLibrary
但是任何人都可以显示一个代码来重现在DllMain 中调用时会发生什么不好的事情吗?在任何现有的 Windows 操作系统中?
不仅仅是在另一个内部调用一个单例初始化函数,而是LoadLibrary
在 DllMain 中调用?
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 不起作用?
windows - 强制从给定目录静态加载 dll
在我们的应用程序中,我们动态加载一个 dll 文件,该文件又与其他 dll 具有静态绑定。
到目前为止,所有这些 dll 都在我们的应用程序文件夹中。从现在开始,我们要将这些 dll 移动到一个目录结构中。应从哪个文件夹加载 dll 将在运行时决定。(版本控制/动态更新...)
问题 1:强制动态加载库在给定文件夹中查找静态加载库的最佳方法是什么?
问题 2:如果旧版本的库遗留在那里,我们如何防止它从应用程序文件夹加载静态库?
(顺便说一句,这是一个win32应用程序......)