问题标签 [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 回答
1014 浏览

c++ - 在 C++ 中运行时加载函数

我有以下问题:

我的程序应该在运行时决定是否加载函数(在本例中为 GetExtendedTcpTable()),因为该方法在 Windows 2000 中不可用!?(仅在 Windows 2000 下无法启动该软件)

感谢您的帮助!

迎接 leon22

0 投票
1 回答
2449 浏览

c - 在 C 中创建一个有效的共享库

我正在做一些测试来学习如何创建共享库。Code::Blocks 中共享库的模板是这样的

图书馆.c

我尝试编译它,它编译时没有任何错误或警告。但是当我尝试将它与 python 3 中的 ctyped.cdll.LoadLibrary("library path.dll") 一起使用时(实际上应该像 C 函数一样工作),它说它不是一个有效的 win32 应用程序。python 和 code::blocks 都是 32 位的(code:blocks 使用 gcc 编译,我尝试在我的系统上使用已安装的 mingw 版本,但它给出了一些关于缺少库的错误),而我正在使用 win 7 64位

你知道问题可能是什么,或者我做错了什么?

EDIT1:我在 Windows 7 64bit 上,在编译器的规范文件中写道:“线程模型:win32,gcc 版本 3.4.5(mingw-vista special r3)”,我用作命令

在我使用的python中

错误是

我从二进制包中安装了 python3.1 和 mingw 并且没有在我的系统上编译它们

EDIT2:阅读马克回答后。

主文件

主程序

编译选项

使用 gcc 4.5.2 仍然会出现相同的错误..

0 投票
2 回答
9194 浏览

c++ - STATUS_STACK_BUFFER_OVERRUN 与 LoadLibrary

当我使用 LoadLibrary 加载 iphlpapi.dll 时,我的堆栈缓冲区溢出!我怎么解决这个问题?!

lib 函数的加载和执行工作正常,但有时我的程序会抛出 STATUS_STACK_BUFFER_OVERRUN 异常!(某些点:当我评论字符串操作时,错误会在几行之后发生)

当我不使用 LoadLibrary 和 GetProcAddress(static binding) -> 没有缓冲区溢出!

谢谢和问候,

leon22

0 投票
1 回答
3622 浏览

windows - LoadLibrary 冻结

我已经编译了一个 JNI dll,我想使用System.loadLibrary. 使用 MSVC++ 2008 Express 编译的 dll 在 Windows XP 上运行良好。

但是,在 Windows 7 上,我使用 MSVC++ 2010 Express(相同的选项,相同的处理器架构,相同的 Java 版本,只是不同的操作系统和编译器)编译了 dll,应用程序将在loadLibrary调用时冻结。没有错误信息,完全没有反应。当我尝试jstack冻结进程时,它也会冻结(没有输出,没有终止)。以管理员身份运行应用程序并不能解决此问题。

DLL 及其所有依赖项位于java.library.path. 事实上,当我删除它们时,Java 应用程序会告诉我它们丢失了,因此 dll 必须已正确初始化,而其他一些东西则失败了。然而,调试证明它实际上是loadLibrary冻结的,之后什么也没有。

谁能告诉我这里可能发生了什么?


更新

正如我在下面的评论中所述,这个问题似乎更深入。使用简单的 C 程序加载所述 DLL 的依赖项之一已经导致冻结发生,因此这一定是 Windows API 以及 MSVC++ 如何链接 DLL 的某种问题(该依赖项也由 MSVC++ 2010 Express 链接) .

0 投票
3 回答
1831 浏览

c# - 有没有办法从托管的 64 位代码加载 32 位 DLL 而无需将托管代码降级为 32 位?

我有一个程序集,Utils,它设置为“任何 CPU”,我有一个托管 EXE,它也设置为“任何 CPU”。该 exe 使用我的 Utils 程序集。

我的 Utils 程序集必须加载一个非托管的、非 com 的 32 位 DLL 并调用一些函数。

我每次都收到异常“尝试加载格式不正确的程序。”。

有什么方法可以让我的 EXE 和程序集在 64 位模式下运行,但仍然加载 32 位 DLL 以进行一些简单的函数调用?

我知道如果我在 32 位模式下构建我的 EXE,那么它将工作,但我的 Utils 程序集将被 WCF Web 服务和其他可能在 64 位模式下运行的程序使用,并且它仍然需要调用 32 位 dll。

有什么办法吗?我试过使用 LoadLibrary,它在从 64 位代码调用时只返回一个 0 指针,而 DllImport 给了我一个异常。

谢谢您的帮助。

0 投票
1 回答
352 浏览

c++ - 调用 GetProcAddress 返回的函数时出现持续访问错误

这是我的代码。这似乎很简单,但不知何故它就是行不通。对函数的最终调用总是失败并出现访问错误。

mydll.dll 是第三方 dll。我没有源码,但是头文件中的函数原型如下:

mydll.dll 本身依赖于其他几个 dll,存储在目录“C:\MyDllDir”中,因此调用了 SetDllDirectory。

一些观察:

  • 我无法让 vanilla LoadLibrary 工作,但LoadLibraryEx参数似乎可以工作(在那个GetLastError返回0
  • 返回的 dll 的地址看起来很奇怪 ( 0x43900000)
  • 返回的函数地址GetProcAddress也是奇数 ( 0x43902b34),但令人欣慰的是 DLL Export Viewer 报告 Init 函数的偏移量为0x00002b34)
  • 调用返回的函数总是会引发访问错误。我已经在函数上尝试了_ccdecl,__stdcall等的每种组合,typedef但总是得到相同的错误。我试过有和没有extern C

其他数据:

  • 这段 c++ 代码是从托管环境中调用的
  • 我在 Windows 7、64 位上运行,但将非托管部分编译为 win32

我究竟做错了什么?我该如何调试呢?我已经尝试过依赖 walker 和 dll 导出查看器,一切似乎都很好。

0 投票
1 回答
963 浏览

visual-studio-2008 - 从 mex 文件显式/隐式加载 dll

我的问题可能与此重复:matlab mex files and C++ dll (windows),但不完全是。

当我尝试从 Matlab 的 mex 文件(Visual Studio 2008、Windows 7 64bit、Matlab 2010b)中显式加载 dll 时,加载在运行时失败(我得到一个 NULL 句柄)。当不在 mex 文件中使用时,相同的代码可以正常工作。

当我尝试通过链接到 .lib 文件来隐式加载时,我收到unresolved external symbol关于 dll 中定义的函数的链接器错误。同样,当不在 mex 文件中使用时,相同的代码也可以正常工作。

原因是否与上述 SO 问题的答案相同,还是我遗漏了什么?如果原因相同,除了上述问题中建议的解决方案之外,还有其他解决方案吗?

0 投票
2 回答
284 浏览

android - 为 tux Rider android 应用程序构建 jni lib

我已经下载了 drodin 的 android 应用程序“Tux Rider”源代码,以便我自己构建它。 https://github.com/drodin/TuxRider

在应用程序中,调用了一个名为“tuxrider”的库

但是没有这样的库,而且我无法弄清楚如何从那里的所有文件中构建一个。

0 投票
1 回答
782 浏览

c# - 关于从 .net dll (C#) 导出函数方法

数学.dll

在我的 exe 项目中,我想使用 Add() 函数,

示例 1 - 这是有效的

示例 2 - 这不起作用

示例 3 - 这不起作用

你能告诉我不工作的例子(2,3)的错误在哪里吗?谢谢。

0 投票
1 回答
170 浏览

windows - 为什么加载 dll 不需要完整的文件路径?这个功能在什么情况下会有用?

为什么 Windows 在调用 LoadLibrary 时不需要完整的文件路径,或者对于带有注册 DLL 的 CLSID 等。在什么情况下,有人会从不得不依靠 DLL 搜索顺序来查找 dll 中受益?

我的意思是,诸如 %SystemRoot% 或 %ProgramFiles% 之类的变量可以将您带到适当的文件夹,而 .\ 会将您留在当前目录中。那么为什么要允许含糊不清呢?