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

c# - C# DllImport 返回类型是 TCHAR?

我有一个带有以下签名的 c++ 函数

我有

如何将字符串编组为 TCHAR*?谢谢

0 投票
3 回答
1720 浏览

c++ - 如何在 .NET 中使用托管 DLL 中的非托管类?

我有一个非托管类,我试图从托管DLL 文件中进行 dllexport。我正在尝试在另一个托管DLL 文件中使用非托管类。但是,当我尝试这样做时,会出现链接错误。

我已经用非托管 DLL 文件做了很多次,所以我知道它是如何工作的。我知道如何在托管类中使用“公共参考”等。

我需要在某个地方设置一些标志吗?还是我必须做一些 DllImport 魔术?

这是在 .NET 2.0 和Visual Studio 2005上。

0 投票
2 回答
12710 浏览

c# - 从 C# 调用 C++ dll 函数:结构、字符串和 wchar_t 数组

这是我需要解决的一个简单问题,但它让我觉得我的头发变白了,因为我所有的尝试都返回了同样的错误:

“试图读取或写入受保护的内存。这通常表明其他内存已损坏。”

我有一个用 C++ 编写的示例应用程序,它调用 dll。以下是相关代码:

现在,当我调试 C++ 代码时,它会做正确的事情——将一些 Unicode 数据写入数据结构。

这是我尝试在 C# 中做同样的事情

我的猜测是我没有正确编组 RECO_DATA 结构,因为 convertHKID_Name 函数写入的正是这个结构。但是我应该如何解决它?

0 投票
3 回答
1055 浏览

.net - DllImport 和 ASP.NET

我在使用 DllImport 和 ASP.NET 时遇到了一些问题,因为当我使用导入的方法时,ASP.NET 会加载 Dll 并锁定文件,即使它完成使用后也是如此。有没有办法强制 ASP.NET 释放文件上的锁定?

0 投票
3 回答
2922 浏览

c# - C#格式化外部Dll函数参数

我还没有找到关于这个主题的好参考。对于这个例子,我们将使用一些我试图移植到 C# 的 C++ 代码。

在 C++ 领域,我们有以下外部库函数原型:

并在其中使用如下:

现在我正在尝试将第一行移植到 C# 中,但这里没有明确的路径。

这是我到目前为止所得到的:

现在的问题是:有没有好的指南告诉我“PSTR pPathFile”应该是“[MarshalAs(UnmanagedType.LPStr)] string pPathFile”......假设这是正确的?

或者,指向“PMAPPING”结构的指针变成“out IntPtr pMapping”......假设这是正确的?

对这个人有什么帮助吗?

0 投票
3 回答
2287 浏览

silverlight - 如何确定是否在 Silverlight 应用程序中切换了 Caps Lock?

在 Silverlight 应用程序的登录屏幕中,我需要确定是否切换了 Caps Lock。这很容易通过处理 KeyUp 或 KeyDown 事件,但是即使没有按下某个键,如何确定它是打开还是关闭?

我想这样做的原因是,如果用户在 Silverlight 应用程序运行时没有按 Caps Lock,而是在进入登录屏幕之前切换了它,该怎么办?我仍然需要警告他们大写锁定已打开。

显然,在 Silverlight 中无法处理非托管代码,因此以下内容不起作用。

[DllImport("user32.dll")] internal static extern short GetKeyState(int keyCode);

0 投票
1 回答
134 浏览

.net - 如何获取异常堆栈

我有一个 Winform 应用程序 (C#),它从 dll 导入一些函数。

有时在运行应用程序时,我会遇到以下异常:

System.AccessViolationException:试图读取或写入受保护的内存。这通常表明其他内存已损坏。

我在 AppDomain.CurrentDomain.UnhandledException 中捕获它。

但我看不到堆栈。我如何获得堆栈?

谢谢。

0 投票
1 回答
3821 浏览

interop - DllImport - PreserverSig 和 SetLastError 属性

在 MSDN 上,我找到了两个属性的以下描述:

PreserveSig将 PreserveSig 字段设置为 true 以直接转换具有 HRESULT 或 retval 值的非托管签名;将其设置为 false 以自动将 HRESULT 或 retval 值转换为异常。默认情况下,PreserveSig 字段为 true。

SetLastError使调用者能够使用 Marshal.GetLastWin32Error API 函数来确定执行方法时是否发生错误。在 Visual Basic 中,默认值为 true(这会增加一些开销);在 C# 和 C++ 中,默认值为 false。

我的问题是:这两者如何相互关联?假设我将 PreserveSig 设置为“false”——这意味着我应该将 HRESULT 转换为异常——如果非托管函数返回表示错误或未发生错误的整数,如何将其转换为异常?

另外,如果我设法使用 PreserveSig 提取异常,为什么还需要调用 GetLastWin32Error 方法?

亲切的问候PK

0 投票
2 回答
2283 浏览

vb6 - 从 VB6 调用一个简单的 VC DLL

我有一个用 VC6 编写的简单 DLL,具有一个功能:

我使用以下命令从 vb6 调用它:

我收到“错误的 dll 调用约定”错误,但我不知道为什么。有任何想法吗?

0 投票
3 回答
1302 浏览

.net - DLLImport'ed / P/Invoke'd win32 dll 中/带有自定义类型?

下午好,

我目前正在与一个旧的 .dll 搏斗,我必须在 .Net 应用程序中重新使用该功能,到目前为止,我导入了返回 bool 等的基本/简单函数/方法,但实际上有些人确实也期望(或return) 在 .dll 中声明的类型。

我将如何处理?我将如何在我的 .net 环境中映射/创建该类型?这有可能吗?

干杯和感谢,-Jörg