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

c# - 使用 PInvoke .Net 设置应用时区

我使用 PInvoke 更改了我的客户系统的时区。而不是我只想更改我的应用程序的时区。是否有解决方法。

0 投票
2 回答
7344 浏览

c# - 将可变大小的双精度数组从 C++ 返回到 C# - 一种更简单的方法?

我有以下 C++ 方法:

__declspec(dllexport) void __stdcall getDoubles(int *count, double **values); 该方法分配并填充一个 double 数组并将 *count 设置为数组的大小。

我设法通过pinvoke让它工作的唯一方法是:

用法是:

这些值最终出现在 dvs 数组中。有没有更好的方法来做到这一点而不涉及托管语言中的指针算术......

0 投票
1 回答
626 浏览

.net - 在 .Net 中设置屏幕分辨率

有谁知道是否有任何托管包装库允许我设置屏幕分辨率,这样我就不必自己做 p/invoke 的事情了?

0 投票
3 回答
2432 浏览

.net - .NET 编组速度

我有一个 C++ 方法签名,如下所示:

我已经将该函数包装在内部和外部的计时方法中。在内部,该函数以 0.24s 运行。在外部,该函数运行时间为 2.8 秒,或慢了大约 12 倍。这是怎么回事?编组让我慢了这么多吗?如果是,我该如何解决?我应该去不安全的代码并使用指针还是什么?我对额外的时间成本从何而来感到困惑。

0 投票
2 回答
615 浏览

c# - 对 CeGetVolumeInfo 的 Pinvoke 调用需要未知的枚举值

我对 PInvoke 调用还很陌生,所以我希望有人可以帮助我解决这个问题:

我正在尝试从 C# 项目中 PInvoke 对 CeGetVolumeInfo() 的调用,该调用保存在 CoreDll.dll 中。 是 MSDN 中此函数的定义:

我的问题是CE_VOLUME_INFO_LEVEL参数。我假设它是某种枚举,但我无法弄清楚它的实际价值是什么(MSDN 没有为它提供任何价值信息),谷歌搜索它几乎一无所获。

有关如何获取/使用 PInvoke 可访问 dll 中定义的枚举的未知值的任何建议?

谢谢!

0 投票
3 回答
2889 浏览

c# - 如何通过 P/Invoke 编组 cstring*?

我正在尝试从 C# 调用第 3 方 DLL,但在编组一些字符串数据时遇到了麻烦。DLL 是用 Clarion 编写的,我对所使用的数据类型不是很熟悉。具体来说,规范有一个我无法工作的功能的签名:

我假设 cstring 只是一个以 null 结尾的字符串,但我无法让它out char[] version在我的定义中使用。有人知道处理这个问题的正确方法吗?

编辑:实际上,到目前为止我所发现的表明 Clarion 中的 cstring 确实只是一个以空字符结尾的字符串。

更新:我更新了问题的标题和详细信息,因为事实证明 DLL 文档中有错字。有问题的version参数被声明为 type cstring*not cstringt*. And in Clarion,cstring` 显然只是一个 c 风格的、以 null 结尾的字符串。所以编组不应该那么复杂,因为他们声称它是用 C 调用约定编写的。有没有人成功地 p/invoked 通过引用参数传递字符串的 Clarion DLL?

0 投票
2 回答
2654 浏览

c# - 平台调用语句中 DLL 的相对路径

我正在使用 VS 2008 开发一个使用 .dll 和 P/Invoke 的应用程序。当我使用绝对路径时,我可以成功使用 dll。例如,这确实有效:

[DllImport("C:\\myDLL.dll")] internal static extern bool isReady();

这不起作用:

[DllImport("myDLL.dll")] 内部静态 extern bool isReady();

我尝试添加一个参考文件夹并将 dll 添加到项目文件夹中,但都不起作用。我需要将此应用程序部署在其他计算机上,并且需要确保包含此 .dll。谢谢您的帮助!


当我尝试这样做时,我忘了提及我收到此错误:

Microsoft Visual Studio 无法添加对“C:\Users\dlugokja\Documents\Visual Studio 2008\Projects\DinamapN.sln(1)\DinamapN\DinamapN\DinaWin.dll”的引用。请确保该文件是可访问的,并且它是一个有效的程序集或 COM 组件。好的

0 投票
3 回答
1224 浏览

c# - 在 C# 和非托管 C++ 之间传递自定义对象

我有一个旧版 DLL,其中包含我需要从 C# 代码调用的几个方法。其中一种方法接收指向另一个 C++ 类的指针,该类位于其他 C++ 程序中,而不是 DLL。

我很确定我需要使用 pinvoke 来回编组对象,但我还没有发现任何关于编组自定义对象的内容。

实现这一目标的最佳方法是什么?

0 投票
2 回答
20105 浏览

c# - 获取活动窗口文本(并向其发送更多文本)

我正在 C# 中创建一个小实用程序,当按下全局热键时,它将向活动文本框添加一些文本,这是一种自动完成功能。我有我的全局热键工作,但现在我不知道如何在活动文本框中获取当前文本(如果活动窗口是一个文本框。)到目前为止我尝试的是使用

一个。GetForegroundWindow,然后使用该句柄调用 GetWindowText。这给了我活动窗口的窗口标题,而不是文本框内容。

湾。GetActiveWindow 并使用该句柄调用 GetWindowText。这根本没有给我任何文字。

这是我所做的一个例子

那么,关于如何实现这一目标的任何想法?

编辑 28.01.2009: 所以,我发现了如何做到这一点。这是我使用的:

关于这一点的一些注释。该示例在执行任何操作之前等待 5 秒,让您有机会将焦点放在某个编辑窗口上。在我的真实应用程序中,我使用热键来触发它,但这只会混淆这个例子。此外,在生产代码中,您应该检查 win32 调用的返回值以查看它们是否成功。

0 投票
3 回答
2080 浏览

.net - P/Invoke SHSetKnownFolderPath

编辑:Scotty2012 和大卫莫顿的答案对我不起作用,所以我对这个问题给予了赏金。我想我需要在传入之前将字符串的类型更改为其他类型。

我在 P/Invoke 上不是什么警察,我正在努力声明和调用SHSetKnownFolderPath。我正在使用 VB9,但如果有人在 C# 中给出答案,我应该能够翻译。

我有 SHGetKnowFolderPath 工作。这是我的代码。

在 VB 中

谢谢!