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

matlab - matlab的calllib中“不支持函数返回类型”的错误是什么意思?

我正在使用 calllib 从 matlab 访问外部 DLL。DLL 中有一个函数,其签名如下所示:

当我尝试在 matlab 中调用它时,

我得到错误:

令人惊讶的是,谷歌没有显示该错误消息,并且 calllib 的文档中没有任何内容:http: //www.mathworks.com/help/techdoc/ref/calllib.html

我的猜测是,由于该函数正在返回一个结构,因此 matlab 正在呕吐。但是文档中没有任何建议。尽管 matlab 没有提供任何示例,但都包含一个结构作为输出变量。

0 投票
3 回答
1727 浏览

c++ - 在MFC APP中,如果我从“InitInstance”调用“LoadLibraryA”,它会一次又一次地调用“InitInstance”

我已经使用 VS2008 向导创建了一个 MFCApp。在我的应用程序的“InitInstance()”中,我正在调用“LoadLibraryA()”方法,因为我需要加载一些 dll 文件。但是一旦我调用“LoadLibraryA()”,它就会再次调用我的应用程序的“InitInstance()”,因此它变成了无限递归的东西。有什么我做错了吗?

调用堆栈:

“Def.dll”是任何其他 dll,与 MyApp 完全无关。在这种情况下,我正在尝试加载另一个 dll “CORE.dll”

我所能弄清楚的是,我在 InitInstance 例程结束之前调用了 LoadLibrary。是否有在 InitInstance 之后调用的任何其他(可覆盖)方法???如果是这样,我可以尝试将 LoadLibrary 调用移至该方法...

0 投票
1 回答
1054 浏览

delphi - Delphi 2010:从 Delphi 执行二进制文件时不加载 DLL

我正在使用我的 Delphi 项目中的 LoadLibrary 加载一个 DLL,如下所示:

DLL 所在的目录包含在 Windows PATH 环境变量中。当我在 Delphi 中执行这个项目时,DLL 不会加载。但是,当直接从 Windows 执行相同的代码时,DLL 会完美加载。

我在这里想念什么?我试图通过将目录添加到工具->选项、环境选项->Delphi选项->库-Win32->库路径来明确告诉Delphi查看DLL的目录。(感觉就像一个完全的PEBKAC。我预计在不久的将来会为自己感到尴尬:) ...)

提前致谢!

0 投票
1 回答
1539 浏览

dllimport - WOW64 重定向和 LoadLibrary

我正在尝试构建一个可以在 64 位 Windows 上正确运行的 32 位程序;也就是说,如果它需要为用户打开一个文本文件,该文件不需要被重定向C:\Program FilesC:\Program Files (x86). 但是,如果我只是调用Wow64DisableWow64FsRedirection,那么我的程序根本无法加载,因为在LoadLibrary加载部分 GUI 时会调用一些系统库,这会尝试将 64 位版本的系统 DLL 加载到我的程序中。

我该如何解决这个问题?


编辑:

请参阅下面的屏幕截图中的问题:


编辑2:

这是另一个可以解决问题的问题:有没有办法为您的进程中的任意线程或整个进程禁用 WOW64 重定向?

0 投票
3 回答
450 浏览

c++ - C++:我们的安装程序拒绝加载我们应用程序的资源 DLL(未找到模块)[仅限 XP]

基本上,当我们的软件在 下运行时Windows 7,它可以工作:调用LoadLibrary()成功,生活美好。

但是,当在一个机器上运行相同的软件XP(最新补丁)时,调用LoadLibrary失败,返回NULL,并带有指定module not found.

我尝试强制它使用该UNICODE版本LoadLibraryW而不是LoadLibraryA我们的应用程序的版本。

我已尝试确保安装文件夹是通过本地驱动器号映射的。

而且我已经验证了路径名实际上可以从执行机器访问(即产生的错误表明它试图加载的路径,我使用该字符串来实际查找文件)。

奇怪的是,这段代码在VS 2008 SP2.

当客户端机器是Windows 7.

仅当它被编译+链接VS 2010并且在客户端上运行时才会失败XP

我完全不知道世界上可能出了什么问题。

为炖菜添加怪异:

如果我XP VM在我的开发箱上启动并在 debug build inVS2010下运行此代码XP,它可以正常工作!

事实上,在 my 下XP VM,标准(发布)构建也可以正常运行!!!

只是当从一个真正的盒子运行时它才会失败(到目前为止, XP我已经尝试了几台机器,都已完全修补)。XP

有什么想法吗?!
我开始没有可靠的想法了。:(

0 投票
4 回答
4374 浏览

winapi - 如何在 x64 环境中使用 32 位 DLL?它不会让我强制 x86 编译!

VC++ 2008,CLR Console App,win7 x64下开发。

我正在使用 .net 和 MS Office v.12 PIA 来做一些 Excel 自动化,效果很好。但现在,我开始了代码的下一部分,其中涉及一些简单的电子邮件事务,所以我试图让 MAPI 在我的代码中工作。基本上,它读取适当的注册表项以获取 OLMAPI32.DLL 文件的完整路径,然后尝试从该 dll 中加载库/GetProcAddress。

这是一个片段:



LoadLibrary 设置系统错误 193:“%1 不是有效的 Win32 应用程序”对我来说并不令人震惊。在做了一些研究之后,我想我需要做的就是强制 x86 编译。所以我转到配置管理器,在活动解决方案平台下,我唯一的选择是 Win32、新建和编辑。所以我点击New,在“Type or select the new platform”下输入“x86”,然后点击“Copy settings from”选择“Any CPU”或合适的,但我唯一的选择是Win32,而且!我想可能是因为我已经瞄准了 .net,所以为了测试这个理论,我开始了一个新项目,这次是作为 Win32 控制台应用程序。即使在那种类型的项目下,我唯一的选择是Win32。我听说的 x86、x64、Any CPU 和 Itanium 在我的 VS2008 中不存在!

所以我在这里不知所措。如何强制 VS 将我的 exe 编译为 x86,以便我可以使用 mapi 接口?或者是否有我可以使用的 64 位版本的 OLMAPI32.DLL?如果没有 64 位库,并且当我尝试为 x86 设置环境时,VS 给了我最重要的提示,我该怎么让 MAPI 在我的代码中工作?我简直不敢相信我的 64 位环境会自动取消我使用 MAPI 的资格。

谢谢

0 投票
2 回答
17958 浏览

dll - LoadLibrary 因找不到模块错误而失败 - 可能存在依赖性问题

我一直在尝试使用 C++ 加载 32 位 dll(来自 32 位应用程序,在 Windows 7 64 位上)。LoadLibrary 返回 NULL,GetLastError 为“找不到指定的模块”返回 126。

我将完整地址传递给 LoadLibrary 函数。我在 Dependency Walker 中打开了 dll,它说 GPSVC.dll 是缺少的依赖项。

从我所做的谷歌搜索来看,看起来 Dependency Walker 经常错误地将这个 GPSVC.dll 显示为缺少的依赖项,并且没有 32 位版本,所以我认为这不是实际问题。

过去我没有对 dll 做太多的修改,所以希望这是一个相对简单的问题,我可以从中学习。

提前感谢您的帮助!

0 投票
1 回答
2611 浏览

winapi - 获取使用 LoadLibrary("MyDll.dll") 加载的 dll 的路径

我正在使用它的名称加载一个 dll,如下所示:

HANDLE hlib = LoadLibrary("Winfax.dll");

现在我想知道 dll 是从哪个路径加载的。有没有办法获取 dll 句柄的完整路径和文件名?

0 投票
2 回答
1599 浏览

c# - 未安装 .net 4.0 时 C++ CLR 加载 .net 4.0 dll

我有一个应用程序,用 c++ 编写并用 VS 2010 编译。我需要加载用 C# 编写并从 c++ 代码为 .net 4.0 平台编译的 .net dll 并调用一些函数。我已经通过 C++ CLR 及其调用 .net 函数完成了这项工作,直到系统中没有安装 .net 4.0。

当未安装 .net 4.0 时,任何函数调用都会在我的 c++ 代码中引发 SEH 异常,但库加载成功。每次异常代码都是相同的0xE0434F4D。

问题:

  1. 是否可以从 C++ 代码中确定加载的 dll 的目标 .net 平台,并确定系统中是否安装了该平台?
  2. 也许还有其他方法可以防止 SEH 异常并显示人类可读的错误解释?

提前致谢

0 投票
4 回答
13154 浏览

c++ - LoadLibrary 采用 LPCTSTR

我想使用 LoadLibrary 开发一个插件系统。
我的问题是:我希望我的函数采用 aconst char*LoadLibrary采用LPCTSTR.
我有一个好主意(LPCSTR)path它一直给我一个未找到模块的错误。

当前代码如下。如果我取消注释该widepath = L..行,它工作正常。我已经阅读了使用 MFC 的解决方案,但我不想使用 MFC。

当前代码: