问题标签 [dll]

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 投票
9 回答
12573 浏览

c# - 设置。默认。始终返回默认值而不是持久存储(XML 文件)中的值

我最近用 C# (.Net 2.0) 编写了一个 DLL,其中包含一个需要 IP 地址的类。我的一位同事更改了类以从“.dll.config”(XML)文件中检索 IP——这显然是由他创建的“应用程序设置”文件(Settings1.settings)自动生成的。这样做的好处是允许最终用户随意更改 XML/config 文件中的 IP 地址。

不幸的是,当我从树中检查他的代码并尝试编译(或使用)这个新代码时,任何调用这个 DLL 的应用程序都只会得到默认值,而不是文件中的值。

调用配置文件的构造函数如下所示:

在 MSDN 论坛上找到了对此问题的参考,其中一位用户说:

“旧”值(您在开发时定义的值)是硬编码的。如果框架无法访问或打开配置文件,它将使用默认值。如果您在 dll 中使用设置,这种情况总是会发生。

  1. 这是否意味着我不能在配置文件中存储 DLL 的外部值?(我的同事以某种方式完成了这项工作......)

  2. 由于我的框架似乎无法访问或打开配置文件,我该如何找出它失败的原因?甚至检测何时发生这种情况?

德克尔:这有点帮助。不幸的是,我正在将此 DLL 写入规范,因此我实际上无法访问应用程序的配置文件。正如您将在上面提到的,我的同事创建了一个“设置1 .settings”文件。当时我不明白这一点,但现在看来,添加“1”会将其排除在任何调用它的应用程序的设置空间之外。

我想我想弄清楚为什么 DLL 似乎没有在同一目录中找到它旁边的配置文件。一步一步地跟踪代码没有发现任何问题。

顺便说一句,我可以将程序集的“输出类型”从“类库”更改为“Windows 应用程序”,并在 DLL 代码的开头添加以下行:

当我运行它时,它会生成一个不同的配置文件(“.exe.config”),我可以更改该文件并让它从文件中提取新数据。所以我有点困惑。有任何想法吗?

0 投票
5 回答
2431 浏览

delphi - 测试 Delphi DLL 崩溃 VB6 IDE

我第一次尝试在 Delphi 中编写 DLL。到现在为止还挺好。通过使用类型库,我能够毫无困难地在 DLL 中传递 Widestrings 和从 DLL 传递 Widestrings。

目前令人好奇的是,我使用 VB6 作为测试平台,每次我在 IDE 中运行测试时,程序都会运行,然后 IDE 进程突然从内存中消失 - 没有错误消息,什么都没有。如果我单步执行代码,一切正常,直到我执行最后一行,然后 IDE 就会消失。

相比之下,当我将测试编译为 EXE 时,程序运行到最后,没有错误消息等。

以前有没有人遇到过这个问题,是否有一个明显的解决方案让我眼前一亮?

下面的源代码,以防万一:

- 项目

- 单元

-- 类型库


我将 WideString 的声明移到我声明它的函数之外,期望这会将变量的生命周期增加到比foo函数的生命周期更长。它没有任何区别。

同样,我在 VB6 中注释掉了对该foo函数的调用。那也没什么区别。不管我做什么,VB6 IDE 在最​​后一行代码执行后就死掉了。

除了指向局部变量的指针之外,还有其他原因。但是什么?

0 投票
2 回答
1110 浏览

dll - 哪个“更好”:带有 Typelib 的 COM DLL 或标准 DLL?

我将“更好”放在引号中,因为这是一个定性问题。几年来我一直在编写 COM DLL,直到最近才发现并成功使用了带有 Typelib 概念的标准 DLL。

使用 COM DLL 代替 DLL+Typelib 是否有任何令人信服的理由?当然,你不能用 DLL+Typelib 做 DCOM,但这是唯一的原因吗?

编辑我已经用 Visual C/C++ 6、Compaq Visual Fortran、Delphi、Visual BASIC 6、ActiveState Perl 和其他一些语言编写了 COM DLL。我用 Visual C/C++ 6、Delphi、Ada 和其他一些语言编写了标准 DLL。我已经为我自己的一些标准 DLL 以及第三方 DLL 编写了类型库。该问题最初是在 VB6 原件的 Delphi DLL+Typelib 重新实现的上下文中编写的。

0 投票
3 回答
6304 浏览

com - 是否有列出从 DLL 导出的方法的工具?

正如问题所述 - 是否有一个很好的工具可以列出非托管 DLL 导出的方法?我也希望它列出 COM 方法和接口。

0 投票
1 回答
1294 浏览

com - InstallShield:达尔文描述符

我的 InstallShield 安装程序似乎没有正确注册它的几个 COM DLL,即使我已经在安装程序中刷新了它们的 COM 信息。如果我在安装后手动运行 regsvr32,一切都很好。

我注意到安装后,我的组件的注册表中有 InprocServer32 值,这些值包含看起来随机的字符串,我相信这是Darwin 描述符,我知道如果存在,它将覆盖明文路径位置。当我手动运行 regsvr32 时,这些达尔文描述符消失了。我目前的假设是这些描述符中编码的信息不正确,因此当我的程序尝试实例化 COM 组件时,它使用了不正确的 Darwin 描述符信息并且失败了,即使 DLL 的明文路径是正确的。

任何人都可以阐明我如何查看是否是这种情况、解码这些描述符、阻止 InstallShield 生成 Darwin 描述符或以其他方式修复我的安装程序吗?

0 投票
2 回答
1548 浏览

c++ - ClickOnce:在用户机器上获取 MSVCRT C++ DLL

我一直在拼命地尝试让我的应用程序(15 个 C# dll 和 1 个具有 C++ 运行时 DLL 依赖项的 C++/CLI dll)使用 ClickOnce 进行部署。我通过复制 Release 文件夹让它工作,但 ClickOnce 拒绝复制文件(msvcm80.dll、msvcp80.dll 和 msvcr80.dll)并将它们部署在这个文件夹中。

我做了这个疯狂的解决方法(提供 msvcm80.dll、msvcp80.dll 和 msvcr80.dll 作为 Content/Copy If Newer,然后在启动时创建 Microsoft.VC80.CRT 文件夹,复制这些 DLL,然后创建 Microsoft.VC80.CRT。 manifest) 这似乎有效,但这一切对我来说都是错误的。

我错过了什么吗?

0 投票
3 回答
7661 浏览

c++ - 缺少 msvcr80.dll

如果编译的库中缺少 C++ 运行时 msvcr80.dll,有没有办法确定使用哪个版本来创建库或让它在更高版本的 msvcr80.dll 上运行?

0 投票
1 回答
503 浏览

dll - 链接到比 Visual Studio 2005 中已安装版本更旧的 .dll 版本

请原谅大量的背景信息,但这是一个相当具体的问题。

我有一个创建 .dll 文件的 Visual Studio 2005 项目。该项目依赖于另一家公司“BigCorp”的 .dll,它与 BigCorp 的软件一起安装。

理想情况下,我创建的 dll 应该可以与 BigCorp 的任何(向后兼容)版本的 dll 一起使用。也就是说,如果我链接到版本 4.3.2.100,如果用户升级 BigCorp 的应用程序以使 .dll 版本为 4.3.3.20,我的程序应该仍然可以工作。

这在 VS2005 中非常简单,通过查看项目的引用,选择 .dll 并确保“特定版本”属性为 false。

现在我的实际问题是:是否可以指定一个比安装在构建项目的机器上的版本更旧的 .dll 的基本版本?继续我之前的示例,我的构建机器安装了 4.3.3.20 版本,但我希望它生成的 .dll 与尚未升级的安装兼容,并且只安装了 4.3.2.100 版本。

似乎VS解析了.dll的路径并根据它找到的文件检测运行时版本。试图通过直接在 .vbproj 或 .csproj 中指定版本号来覆盖它,即

没有效果。尝试在具有较旧版本的计算机上注册我的程序集失败,并出现旧的“无法加载文件或程序集”错误,因为它试图找到 BigCorp 的 .dll 的较新版本。

我想做的甚至可能吗?

0 投票
4 回答
10601 浏览

windows - 如何拦截dll方法调用?

如何拦截dll方法调用?

  • 有哪些可用的技术?
  • 只能在 C/C++ 中完成吗?
  • 如何拦截所有正在运行的进程对给定dll的方法调用?
  • 如何拦截从给定进程到给定dll的方法调用?
0 投票
4 回答
14897 浏览

python - 在 py2exe 构建中包含 PYD/DLL

我的应用程序的其中一个模块使用 .pyd 文件中的函数。有一个排除 dll (exclude_dlls) 的选项,但有一个选项可以包含它们吗?尽管复制了其余文件(.py),但构建过程似乎并未复制我模块中的 .pyd。我还需要包含一个 .dll。如何让 py2exe 同时包含 .pyd 和 .dll 文件?