问题标签 [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 投票
4 回答
562 浏览

asp.net - ASP.NET 2.0 应用程序在 Win 2003 上以 IIS 5 隔离模式运行,但不在(默认)IIS 6 模式下运行

该应用程序使用 DLLImport 调用旧版非托管 dll。为了这个问题,我们将这个 dll 称为 Unmanaged.dll。Unmanaged.dll 依赖于其他 5 个旧版 dll。所有旧版 dll 都放在我的 ASP.NET 应用程序的 WebApp/bin/ 目录中。

当 IIS 在 5.0 隔离模式下运行时,应用程序工作正常 - 对旧版 dll 的调用被正确处理。

当 IIS 在默认的 6.0 模式下运行时,应用程序能够启动 Unmanaged.dll (InitMe()),但在稍后调用它 (ProcessString()) 期间会死掉。

我在这里拉头发。我已经将非托管 dll 移动到不同的位置,尝试了各种安全设置,并长期努力地寻找解决方案。帮助!

示例代码:

更新:

带回一堆,取自一个小型转储。似乎是堆栈溢出,但如果有人可以帮助我,我想知道更多。加载了 sos.dll 的 WinDbg 中“kb”的结果:

0 投票
3 回答
7276 浏览

c# - DLLImport Int** - 如果可以的话怎么做

我正在尝试使用第三方 DLL,它需要一个 int** 作为该方法的参数之一。它将参数描述为指向内存分配的指针的地址。

很抱歉有任何混淆。我认为参数是双向的。DLL 用于与 FPGA 板通信,方法是在主机 PC 和 PCI 板之间建立 DMA 传输。

0 投票
5 回答
5072 浏览

c# - 从 C# 调用 FORTRAN DLL 的受保护内存冲突

我正在尝试调用从 FORTRAN 代码编译的旧版 dll。我是 Interop 的新手,但我已经阅读了一些关于它的文章,看起来我的案例应该相当简单。

我真正想调用的方法有一个复杂的方法签名,但我什至不能调用这个简单的 GetVersion 方法而不会得到受保护的内存冲突。

这是我的 DllImport 代码:

这是 FORTRAN 代码:

这是我失败的单元测试:

这是我收到的错误消息:

我尝试过的其他事情:

  • 使用默认编组
  • 传递 char[] 而不是字符串(改为获取方法签名错误)
0 投票
2 回答
6544 浏览

.net - DLLImport 在哪里查找非托管 DLL?

一个简单的问题:当在 .Net 中声明 DLLImport 属性时,运行时会在哪里解决该 DLL 依赖关系?我是否必须将 DLL 及其所有依赖项转储到bin文件夹中?

0 投票
4 回答
23923 浏览

dll - dllimport 无法找到 dll,即使它位于 PATH 中

我使用 [Dllimport("DllName.dll")] 我确定我的 dll 的路径存在于进程 PATH 环境变量中,但我仍然得到“找不到 DllName.dll”

0 投票
6 回答
12565 浏览

c++ - 使用来自 c++ 程序的 dll。(borland c++ builder 和一般)

我正在尝试在我的程序中使用 dll,即 libcurl,但是,它没有链接。Libcurl 带有我可以包含的 .h 文件(负责 dllimport),但是我想我必须指定在以某种方式链接时实际使用的 dll ......我该怎么做?我正在使用 Borland C++ builder 进行编译,但我真的很想知道这些东西一般是如何工作的......

编辑:这是代码(来自 curl 主页的直接 c/p)

以下是错误:

编辑 2:根据 joe_muc 的建议,我使用 implib 工具制作了 lib 文件,并将它们包含在链接器路径中。我仍然得到同样的错误。

0 投票
3 回答
11145 浏览

c# - 如何将 const char* API 导入 C#?

鉴于此 C API 声明,如何将其导入 C#?

我已经能够做到这一点:

0 投票
2 回答
1776 浏览

c# - pinvoke:不确定如何使用 dllimport 和导入的库

我正在对 C++ dll 执行 dllImport,并且我有以下签名。到目前为止,StackOverflow 一直很有帮助,所以我想我会扔掉这个,看看我得到了什么。

有什么我应该担心的问题吗?这是我第一次使用 dllimport。

我需要将以下内容导入 C#:

处理 FooInit(char* 名称); //名称似乎是一个字符串,如“COM1”

int Foo1(HANDLE 句柄, const char** 句); //sentence 似乎是一个类似“Hello World”的字符串

int Foo2(HANDLE 句柄, DWORD* val);

非常感谢!

0 投票
3 回答
12768 浏览

c# - 如何将 void * C API 导入 C#?

鉴于此 C API 声明,如何将其导入 C#?

我已经能够做到这一点:

自然在 C# 中“void *”不会编译。

一些谷歌搜索表明它应该被翻译为“对象”。这似乎应该工作。但其他人指出“Void * 在 C/C++ 术语中称为函数指针,在 C# 术语中是委托”。这在这里没有多大意义,因为它将委托给什么?通过谷歌搜索找到的对其他 API 的一些类似调用使用相应 API 中的其他函数。但是在这个 API 中,没有其他调用是有意义的。

调用的文档显示了一个示例:

这似乎表明即使是静态值也可以传递。

它将用对象代替 void * 进行编译。我不知道这是否正确,我也没有机会对其进行测试(许可问题)。

0 投票
1 回答
2295 浏览

qt - mingw 吐出无数关于忽略“dll 导入”属性的警告

mingw32-make用来编译一个使用 opengl 的 qt 项目,它可以正确编译一切,但它会吐出无数形式的警告消息:

对于这个特定的实例,函数声明是:

我的问题是,为什么它会吐出所有这些警告?我怎样才能在不消除其他合法警告(即与我的代码直接相关并且可能是潜在问题的警告)的情况下使它们静音?

更重要的是,为什么 mingw 一开始就忽略了 dll 导入属性?