问题标签 [pinvoke]

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 投票
3 回答
21381 浏览

c# - PInvoke 用于返回 char * 的 C 函数

我正在尝试编写一些从非托管 DLL 调用方法的 C# 代码。dll中函数的原型是:

在 C# 中,我首先使用:

它似乎在表面上工作,但我在运行时遇到内存损坏错误。我想我指的是恰好是正确的但已经被释放的内存。

我尝试使用名为“P/Invoke Interop Assistant”的 PInvoke 代码生成实用程序。它给了我输出:

它是否正确?如果是这样,如何将此 IntPtr 转换为 C# 中的字符串?

0 投票
1 回答
531 浏览

c# - 对在远程桌面上运行的程序使用调试模式

我有一个专门用于远程桌面连接的短程序,该连接已设置为仅运行该程序,不允许任何其他访问远程计算机。以前,程序只是退出,让连接终止,但是速度很慢,所以我写了下面的代码,在程序运行完成后终止远程会话。

当该程序处于其生产环境中时,这可以正常工作,由使用特定 RDP 连接文件进行远程处理的人员使用。程序运行后连接退出。但是,在测试和调试此程序时,我的计算机在每次运行后都会重新启动。

我正在寻找一种区分这些情况的好方法。我应该设置某种远程调试脚本并远程运行程序吗?或者有没有办法以编程方式检测程序是否在调试模式下运行并在这种情况下禁用退出过程?

0 投票
3 回答
4386 浏览

c# - 用于编组结构数组的辅助函数(带指针)

这似乎是最常见的 C# 互操作问题,但似乎很难找到有效的解决方案。

我需要在 C# 中分配一个矩阵数据结构数组,将其传递给一个 C DLL,该 C DLL 填充数据并将其返回给调用者进行处理。

基于网络上的各种页面,我似乎已经设法将数据和内存从 C# 获取到 C++ 中,但似乎没有返回......

代码如下。

在此先感谢您的帮助


我有一个 C++ 结构如下

我在 C# 中声明为

0 投票
1 回答
2211 浏览

asp.net - 单声道上的 DevExpress ASP.Net 组件

我是 DevExpress 组件的快乐用户,尽管目前我仍在使用 linux 网络主机。

在另一个线程中,我谈到了我迁移到 Windows 环境的计划,以便我可以使用 DevExpress 的 ASP.Net 组件。一段时间以来,DevExpress 的立场是,由于 P/Invoke 的大量使用,他们的组件不太可能在 Mono 上工作。

以前没有使用过他们的 ASP.Net 组件的经验,我的问题是,有没有人在 Mono 下成功使用过他们的 ASP.Net 控件?我读过一些帖子,表明他们在单声道下使用 ASP.Net 的东西比 WinForms 的东西好得多。

0 投票
2 回答
5352 浏览

c# - System.Runtime.InteropServices.ComTypes.IStream 到 System.IO.Stream

在 .NET 3.0 项目中,我需要通过 P/Invoke 进行一些调用(特别是对像 PTConvertPrintTicketToDevMode() 这样的 PrintTicket Provider 函数)。

该框架具有 COM IStream 接口的托管定义: System.Runtime.InteropServices.ComTypes.IStream

我需要它作为 System.IO.Stream,以便我可以轻松地将 .NET 类(如 XmlDocument)与这些导入函数的输出一起使用。但是,除了一次读取和写入一个字节块数据之外,我看不到将它来回转换为System.IO.Stream的更痛苦的方法。对于一项看起来很常见的任务来说,这似乎太笨拙了。

还是我走错了路?

我将PTConvertPrintTicketToDevMode () 导入为:

0 投票
1 回答
1525 浏览

.net - 如何在 .NET 中将字符串数组转换为 LPCWSTR 以传递给 Win32 API 函数?

我有一段 C# 代码需要将字符串数组转换为 LPCWSTR 以传递给 Win32 API 函数。我在 Marshal 类中找不到任何让它简单明了的东西。有人知道该怎么做吗?

0 投票
3 回答
1598 浏览

c# - P/Invoke 和 C# 的自定义调用约定

我有一个商业案例,我需要能够在使用 P/Invoke 时指定我自己的调用约定。具体来说,我有一个使用非标准 ABI 的旧版 dll,我需要能够为每个函数指定调用约定。

例如,此 dll 中的一个函数通过 EAX 和 EBX 接受其前两个参数,其余通过堆栈接受。另一个函数通过 ECX 接受一个参数,其余的在堆栈中。我有几百个这样的函数,并且想避免编写我自己的中间桥 DLL 来访问这些函数。

我的另一个选择是手动滚动我自己的自定义 P/Invoke,这显然是不可取的。

任何帮助表示赞赏,谢谢,

0 投票
7 回答
82623 浏览

c# - 如何以托管方式在.NET中获取父进程

我一直在寻找在 .NET 中获取父进程的方法,但只找到了 P/Invoke 方式。

0 投票
1 回答
20812 浏览

c# - 如何在 C# 中调用“CreateFile”?

在得到了这么多关于从存储设备中检索 .MBR的信息之后,结论是使用 P/Invoke 来调用CreateFile.

但是如何在 C# 中做到这一点?请举例说明!对你的帮助表示感谢!!!

0 投票
1 回答
1403 浏览

timezone - 在 Windows CE .NET 4.2 中,为什么 SetTimeZoneInfo 会挂起?

我们的产品包含一个任务管理器系统,允许应用程序在预定的时间间隔内运行 DLL 中的代码,指定有关任务失败是否应禁用相关应用程序的规则等。主要用于数据上传、数据下载,本地数据库维护等。使用的功能之一是通过NTP同步设备时间并设置操作系统的时区信息。为此,我们使用 OpenNetCF 的 DateTimeHelper 类,它似乎充当了 Win32 P/Invokes 的包装器。

任务管理器的其他功能之一是,如果任务运行时间超过其分配的时间窗口,任务管理器将 Thread.Abort() 它以允许其他任务运行。我们看到了惊人数量的线程中止,其中堆栈中最高的函数是 OpenNetCF.WindowsCE.NativeMethods.SetTimeZoneInformation()。为什么底层 P/Invoke (SetTimeZoneInfo) 会挂这么长时间?

我们的代码在 Windows CE 4.2 上运行,用户群更小,在 Windows CE 5.0 上运行——这里的代码在两个版本之间是相同的。到目前为止,我已经看到这种情况发生在 4.2 设备上,但从未在 5.0 上发生过,即使 5.0 上的用户数量较少,我想如果它出现在那里我也会看到它。

下面的函数是产生问题的函数。它将时区缩写转换为其全名,然后使用该名称查找正确的时区并尝试将设备的当前时区设置为该时区。

一如既往地感谢您的帮助。有什么想法吗?