问题标签 [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.
c# - 使用 PInvoke .Net 设置应用时区
我使用 PInvoke 更改了我的客户系统的时区。而不是我只想更改我的应用程序的时区。是否有解决方法。
c# - 将可变大小的双精度数组从 C++ 返回到 C# - 一种更简单的方法?
我有以下 C++ 方法:
__declspec(dllexport) void __stdcall getDoubles(int *count, double **values); 该方法分配并填充一个 double 数组并将 *count 设置为数组的大小。
我设法通过pinvoke让它工作的唯一方法是:
用法是:
这些值最终出现在 dvs 数组中。有没有更好的方法来做到这一点而不涉及托管语言中的指针算术......
.net - 在 .Net 中设置屏幕分辨率
有谁知道是否有任何托管包装库允许我设置屏幕分辨率,这样我就不必自己做 p/invoke 的事情了?
.net - .NET 编组速度
我有一个 C++ 方法签名,如下所示:
我已经将该函数包装在内部和外部的计时方法中。在内部,该函数以 0.24s 运行。在外部,该函数运行时间为 2.8 秒,或慢了大约 12 倍。这是怎么回事?编组让我慢了这么多吗?如果是,我该如何解决?我应该去不安全的代码并使用指针还是什么?我对额外的时间成本从何而来感到困惑。
c# - 对 CeGetVolumeInfo 的 Pinvoke 调用需要未知的枚举值
我对 PInvoke 调用还很陌生,所以我希望有人可以帮助我解决这个问题:
我正在尝试从 C# 项目中 PInvoke 对 CeGetVolumeInfo() 的调用,该调用保存在 CoreDll.dll 中。 这是 MSDN 中此函数的定义:
我的问题是CE_VOLUME_INFO_LEVEL
参数。我假设它是某种枚举,但我无法弄清楚它的实际价值是什么(MSDN 没有为它提供任何价值信息),谷歌搜索它几乎一无所获。
有关如何获取/使用 PInvoke 可访问 dll 中定义的枚举的未知值的任何建议?
谢谢!
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?
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 组件。好的
c# - 在 C# 和非托管 C++ 之间传递自定义对象
我有一个旧版 DLL,其中包含我需要从 C# 代码调用的几个方法。其中一种方法接收指向另一个 C++ 类的指针,该类位于其他 C++ 程序中,而不是 DLL。
我很确定我需要使用 pinvoke 来回编组对象,但我还没有发现任何关于编组自定义对象的内容。
实现这一目标的最佳方法是什么?
c# - 获取活动窗口文本(并向其发送更多文本)
我正在 C# 中创建一个小实用程序,当按下全局热键时,它将向活动文本框添加一些文本,这是一种自动完成功能。我有我的全局热键工作,但现在我不知道如何在活动文本框中获取当前文本(如果活动窗口是一个文本框。)到目前为止我尝试的是使用
一个。GetForegroundWindow,然后使用该句柄调用 GetWindowText。这给了我活动窗口的窗口标题,而不是文本框内容。
湾。GetActiveWindow 并使用该句柄调用 GetWindowText。这根本没有给我任何文字。
这是我所做的一个例子
那么,关于如何实现这一目标的任何想法?
编辑 28.01.2009: 所以,我发现了如何做到这一点。这是我使用的:
关于这一点的一些注释。该示例在执行任何操作之前等待 5 秒,让您有机会将焦点放在某个编辑窗口上。在我的真实应用程序中,我使用热键来触发它,但这只会混淆这个例子。此外,在生产代码中,您应该检查 win32 调用的返回值以查看它们是否成功。
.net - P/Invoke SHSetKnownFolderPath
编辑:Scotty2012 和大卫莫顿的答案对我不起作用,所以我对这个问题给予了赏金。我想我需要在传入之前将字符串的类型更改为其他类型。
我在 P/Invoke 上不是什么警察,我正在努力声明和调用SHSetKnownFolderPath。我正在使用 VB9,但如果有人在 C# 中给出答案,我应该能够翻译。
我有 SHGetKnowFolderPath 工作。这是我的代码。
在 VB 中
谢谢!