问题标签 [dllimport]

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 回答
4773 浏览

c++ - 在什么情况下你会得到 __declspec(dllimport) 的未解析的外部符号?

我正在将应用程序转换为使用 .dll 并且我充满了链接器错误说明

未解析的外部符号“__declspec(dllimport) public: void __thiscall Rail::SetNextrail(class Rail *)”

此错误消息的末尾有更多乱码。为什么会发生这种情况以及如何解决?__declspec(dllimport) 与定义为的宏一起放置:

0 投票
3 回答
3824 浏览

.net - CPU 体系结构独立 P/Invoke:DllName 或路径可以是“动态的”吗?

有没有办法让 P/Invoke (DllImport) 签名引用的特定 DLL 取决于 CPU 架构?

我正在开发一个应用程序,该应用程序从第三方供应商的本机 dll 加载大量方法签名,在本例中是用户空间接口 DLL 到一个硬件。该供应商现在已经开始提供 DLL 的 x86 和 x64 版本,我认为我的应用程序将受益于作为 64 位进程运行。除了这个 DLL,一切都是 .NET 代码,因此构建为“任何 CPU”都可以。

本机 DLL 中的所有方法签名在 64 位上都是相同的,但是 DLL 的名称不同(Foo.dll 与 Foo_x64.dll)。有没有办法通过 P/Invoke 签名或 app.config 条目,我可以让它根据正在运行的 CPU 架构选择要加载的 DLL?

如果不是不同的 DLL 名称而是不同文件夹中的相同名称,那会打开任何其他选项吗?

注意:因为此用户空间 DLL 的版本必须与已安装的硬件内核驱动程序相匹配,所以 DLL 不与我们的应用程序捆绑在一起,而是依赖供应商安装程序将其放置在 %小路%。

0 投票
3 回答
3438 浏览

c++ - 无法在 Delphi 中使用 DLL(用 C++ 编写):找不到过程入口点

我在 Visual Studio 中编译了一个 DLL(源代码是 C++,我几乎看不懂)。这是一块Scraper.h

现在我正在尝试在我的 Delphi 应用程序中使用上述功能:

项目无法编译,我收到以下消息:过程入口点 ScraperGetWinList 无法位于动态链接库中: Scraper.dll

我究竟做错了什么?

0 投票
4 回答
5497 浏览

c++ - Delphi:从外部 DLL (C++) 调用函数后访问冲突

有一个用 C++ 编写并编译为 DLL 的函数,我想在我的 Delphi 应用程序中使用它。

刮板.cpp:

刮板.h:

这就是我在Delphi 应用程序中声明函数的方式:

该功能有效,但是当它完成时,我收到调试器故障通知:项目 ... 出现错误消息:''在 0x0012f773 的访问冲突:写入地址 0xffffffc0'。进程停止。使用 Step 或 Run 继续。

如果我在 Scraper.cpp 和 Scraper.h 中添加__stdcall(后SCRAPER_API bool),则 Delphi 应用程序根本无法启动:过程入口点 ScraperGetWinList 无法位于动态链接库 Scraper.dll 中。

0 投票
6 回答
747 浏览

c# - 有没有更轻松的方式从 C# 调用 Win32?

每隔几个月,我就会发现自己需要从 C# 调用 Win32。虽然我已经做了十几次,但我通常忘记了确切的阴谋,所以我浏览了网络或旧代码并找出我需要什么 DllImport 语句等。

我一个人吗?

是否有一个认可的“Win32”类具有整个 Win32 API 的必要声明?好像应该有。也许我错过了一些东西。

0 投票
4 回答
5670 浏览

c# - DllImport a c++ DLL in a C# app, BYTE * p

我在 C++ DLL 中有一个导出函数

我想让它可用于我的 C# 应用程序

问题是我不断收到以下错误消息。

Blarggg.dll 中发生了“System.NullReferenceException”类型的未经处理的异常附加信息:对象引用未设置为对象的实例。

我正在使用 VS2008 来构建 DLL 和 C# 应用程序。

我不是 C# 程序员。

我究竟做错了什么?

0 投票
1 回答
2493 浏览

c# - 尝试在 C# 中创建数学输入面板

如何在 C# 中创建数学输入面板?

我试图将它放入一个 dll 并调用它,但它会立即关闭。

我在 C# 中调用 dll 函数,面板弹出但立即消失。有什么建议么?

0 投票
3 回答
1485 浏览

c# - C# 调用非托管 C++ 返回正方形符号字符串

我有一些 C# 代码调用非托管 C++ DLL。我正在调用的方法旨在接受一个字符串作为参考。为了处理这个问题,我传入了一个 StringBuilder,否则会出现 StackOverflowException。

这工作正常,但在某些调用中,从非托管代码返回的字符串是这样的混乱字符串:øŸE~.,Ê。我知道这一定与编码有关,但我尝试了下面列出的几件事,但没有任何效果。这不是其他人为执行类似操作而编写的 VB.Net 代码中的问题。

这是我尝试过的: 1. 我正在使用这个:[DllImport("dmphnx32.dll")],但尝试了所有字符集选项都没有成功。

  1. 尝试使用 Encoding.Default.GetBytes、Encoding.ASCII、Encoding.Unicode 等,但均未成功。

我对 C++ 没有任何经验,所以我真的可以使用帮助。

这是 DLLIMport 方法:

这是 C++ 代码:

这是调用非托管代码的 C# 代码:

谢谢,科里

0 投票
3 回答
6243 浏览

c# - 参数化 DllImport 以在 C# 应用程序中使用

我们有一个供应商提供一个库来访问他们的硬件。不幸的是,如果您有多个设备,则需要使用不同的 dll 名称多次导入它们的库。结果,我们有大量的重复代码,我担心它很快就会成为维护的噩梦。

我们目前拥有的东西是这样的:

...

……

...

如果我使用的是 C 或 C++,我只会在一个文件中定义函数并在静态类中多次#include 它们,虽然不漂亮但比替代方案更好,但在 C# 中我没有那个选项。

如果有人对如何有效地定义一个工厂有任何聪明的想法,这将使我们能够根据需要生成尽可能多的静态设备类,我会非常感兴趣。

谢谢,

编辑:函数原型变化很大,因此任何依赖它们相同的方法都不合适。到目前为止,感谢您的建议,我并没有这么快就提出这么多想法。

0 投票
5 回答
80403 浏览

c# - 读取注册表项

我有一个从 bin 文件夹中导入 DLL 的 Web 应用程序。

现在我要做的是首先从不在当前项目中而是在某个不同位置的文件夹中导入 DLL。

该文件夹的路径存储在注册表项中。

我该怎么做?

编辑

为什么我不能解决这个问题???

string pathName = (string)registryKey.GetValue("BinDir");在这里不工作,但在页面加载事件中工作......

但是,如果我这样做 DLL 导入将无法正常工作......我该如何解决这个问题?