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

c# - 从 const int * const buffer[] 中检索数据

我正确编组:

缓冲区是指向具有各自数据的数组的 2 个指针的数组的指针。问题是我得到的数据不准确,例如检索到的数据中是否缺少某些内容(例如,来自音频数据流的 misimg 样本)。

编辑:对不起,我忘了写那两行:)

0 投票
2 回答
4261 浏览

windows-mobile - 如何检测移动设备上的 ActiveSync 连接?

我在 WindowsCE 5.0 设备上使用 CompactFramework 3.5 来构建一个应用程序,该应用程序应该使用主动同步的连接来获取一些数据。

我如何检测移动设备是否在通讯座中并具有活动连接?是否有某种 PInvoke 调用?

0 投票
6 回答
24022 浏览

c# - 新的 IntPtr(0) 与 IntPtr.Zero

这两种说法有什么区别:

如果 myPtr 参数由 ref 发送到被调用函数,我已经看到许多使用 PInvoke 的示例更喜欢第一种语法。如果我在我的应用程序中用 IntPtr.Zero 替换所有新的 IntPtr(0),它会造成任何损害吗?

0 投票
5 回答
18091 浏览

c# - 将函数从 C++ dll 导出到 C# P/Invoke

我已经构建了一个我想从 C# 代码调用的 C++ dll。我可以调用一个函数,但是当 C# 代码尝试加载 dll 时,另一个会引发异常。

标题如下所示:

这会生成一个带有稍微混乱的导出表的 dll(foo = foo 在 name 字段中是什么意思?):

我的 P/Invoke 声明如下所示:

对 Install 的调用毫无例外地返回,但是当我调用 PPPConnect 时,我得到一个 MissingMethodException -“在 PInvoke DLL 'PPPManager.dll' 中找不到入口点 'PPPConnect'。”

我尝试从 Install 函数声明中删除 extern 和 declspec 指令,这样 PPPConnect 是唯一导出的函数,这仍然不允许我调用 PPPConnect。

我也尝试过按序号进行 DllImport;这给出了与按名称调用相同的结果 - 安装返回,但 PPPConnect 抛出异常“找不到入口点 '#2'...”。

互操作日志给出:

这远远超出了我的专业领域,因此欢迎任何建议或想法。

谢谢,保罗

编辑:事实证明这段代码确实有效;问题在于最新的 dll 没有传播到设备。哦!

0 投票
2 回答
5146 浏览

c# - 获取具有多个监视器的整个屏幕的 DeviceContext

我需要用 C# 在所有东西上画一条线(用鼠标)。我可以使用 P/Invoke 获取桌面窗口的 Graphics 对象:

DesktopGraphics = Graphics.FromHdc(GetDC(IntPtr.Zero));

然而,我使用这个图形对象绘制的任何东西都只显示在左显示器上,而在右显示器上什么也没有。它没有失败或任何东西,它只是没有显示。

创建 Graphics 对象后,它显示可见剪辑区域为 1680 x 1050,这是我左显示器的分辨率。我只能假设它只是获取左监视器的设备上下文。他们是获取两个(或任何数量)监视器的设备上下文的方法吗?


编辑 3/7/2009:有关我使用的修复程序的附加信息。

我使用 colithium 提供的修复程序提出了以下代码,用于为每个监视器创建图形对象以及存储偏移量的方法,以便我可以将全局鼠标点转换为图形表面上的有效点。

0 投票
3 回答
6251 浏览

pinvoke - 使用 [Out] StringBuilder / LPTSTR 和多字节字符的 P/Invoke:乱码文本?


我正在尝试使用 P/Invoke 从非托管 DLL 中获取字符串(以及其他内容),但无论我尝试什么,该字符串都会出现乱码。

我不是本地 Windows 编码器,所以我不确定字符编码位。DLL 设置为使用“多字节字符集”,我无法更改(因为这会破坏其他项目)。我正在尝试添加一个包装函数来从一些现有的类中提取一些数据。有问题的字符串当前作为 CString 存在,我正在尝试将其复制到 LPTSTR,希望将其放入托管的 StringBuilder 中。

这是我所做的,我认为是最接近正确的(显然,我已经删除了不相关的部分):




非常感谢任何提示!谢谢!!!

0 投票
2 回答
1129 浏览

c# - Windows Mobile API 调用 - 成功但 GetLastWin32Error 返回错误代码 - 我应该担心吗?

我是 PInvoke 呼叫的新手。我用谷歌搜索了这个,因为这似乎是一个很简单的问题,但并不快乐。

我正在连续进行多次 Windows Mobile API 调用(以检测我的应用程序是否已经在运行,然后重新激活它)。一切正常,花花公子,但我想在它不能正常工作的时候加入日志记录等。

在编写此代码时,我发现即使我的调用显然返回了有效结果并且后续调用成功使用了有效结果(我认为证明它是有效的),我也会收到错误代码。

例如,我调用 CreateToolhelp32Snapshot,它为我提供了当前运行进程快照的句柄。在返回错误 6 后立即调用 Marshal.GetLatWin32Error,这显然意味着无效的句柄。但是返回值被后续调用其他方法成功使用,整个过程正常。绝对是这个特定的调用设置了错误 6,因为如果您在调用之前调用 Marshal.GetLatWin32Error,它会返回 0。

对 Process32First 和 Process32Next 的调用表现出类似的行为,即它们很高兴地给我进程信息,但有时会设置错误 6。我(认为)我知道这是因为我在每次调用之前和之后立即调用 Marshal.GetLatWin32Error,有时它在之前和 6 之前是 0后。目前我总是得到一个成功的结果(或者一个处理后续调用的句柄,或者一个转换为 1 如果 int 或 true 如果 bool 和进程信息成功复制到我的缓冲区中的值)。

所以……我应该关心吗?这一切都在工作....如果我返回一个被其余过程成功使用的结果,我是否关心设置了什么错误?我的直觉说是的,我当然愿意?无论哪种方式,如果我显然得到了成功的结果但也设置了错误代码,我怎么知道一切是否正常?我做噩梦发布一个不稳定的系统,它不会给我有用的错误信息............

更新

这是我的 loggong 代码的结果,试图为任何感兴趣的人说明我在说什么。简而言之,代码检查自身是否已经运行,然后检查客户端是否已经运行,如果找到则重新激活客户端。

结果始终为真,除了对 Process32Next 的最后一次调用,其中代码 18 的失败表示已到达最后一个条目。而且我刚刚注意到 ShowWindow 导致了不支持的错误 120,所以我会取消这个调用。

所以我的两个实际问题是:

为什么我成功时出现错误?
而且,当调用前和调用后错误相同时,我如何知道这是旧错误还是同一错误的第二次出现?

0 投票
1 回答
248 浏览

.net - 如何从部分受信任的 .NET 应用程序中刷新任务栏?

我想刷新任务栏(例如这里描述的),但我不能在我的应用程序运行的安全上下文中P/Invoke FlashWindowEx(或其他任何东西)。

还有其他方法可以让任务栏闪烁吗?如果没有,我有哪些选择来吸引用户的注意力?

0 投票
1 回答
404 浏览

.net - 在 Mac 上转换为 Mono

我有一个用 .NET 2.0 编写的项目(好吧,无论如何,它并没有像 3.5 那样使用太多功能),我最近有一台 Mac,想将该项目转换为 Mono。

问题是,这个项目依赖于诸如FreeImage之类的库和我为这个项目编写的一些 C++ 库。我完全是在 Mac 上编程的新手;我怎样才能将这些库链接到这个项目中,以便 p/invoke 调用不会失败?如果需要,我可以再次编译所有库,那么我应该将库放入什么格式,我应该使用任何特定的工具吗?在 Visual Studio 端编码时,我只是将库作为项目放在与 .NET 代码相同的解决方案中。Mac 上是否存在类似的设置?

0 投票
1 回答
1138 浏览

c# - 如何从服务获取登录用户的活动窗口

我正在编写一个 C# 服务,它必须从当前登录的用户那里检索信息,例如活动窗口或最后一次鼠标移动。我已经了解到我可以使用 user32.dll 来检索这些信息,但这只能在调用方法的用户上下文中工作。

这样,我的服务只能检索有关其自身的信息,而不能检索有关“真实世界”用户的信息。我还听说这应该可以通过使用 WTSEnumerateSessions、OpenWindowStation、EnumDesktops 等来实现,但我还没有找到一个示例来展示如何做到这一点。

有人知道如何实现我的目标(或者可能是一些代码示例)吗?