标签: pinvoke

如何从Native(C++)代码返回文本

我使用Pinvoke实现本机(C++)代码和托管(C#)代码之间的互操作性.我想要实现的是从本机代码中获取一些文本到我的托管代码中.为此,我尝试了很多东西,例如通过ref传递字符串/ stringbuilder,使用[IN]和[OUT],Marshaling到LPSTR,从函数返回字符串等,但在我的情况下没有任何作用.任何有关一些小代码的帮助都将受到高度赞赏.

c# c++ string pinvoke

33
推荐指数
2
解决办法
1万
查看次数

从十六进制数中获取Windows系统错误代码标题/说明

我正在使用p/invoke搞乱一些windows函数.偶尔,我得到的错误代码不是ERROR_SUCCESS(这么奇怪的名字).

有没有办法在程序中查看这些内容?例如,如果我收到错误1017.我可以告诉用户

系统已尝试将文件加载或还原到注册表中,但指定的文件不是注册表文件格式.(ERROR_NOT_REGISTRY_FILE:0x3F9)

代替

错误代码:1017

.net c# windows pinvoke

32
推荐指数
1
解决办法
3万
查看次数

DWORD应该映射到int还是uint?

在将Windows API(包括数据类型)转换为P/Invoke时,我应该用int或替换DWORD uint吗?

它通常是未签名的,但我看到人们int在任何地方使用它(只是因为CLS警告?甚至.NET Framework本身这样做),所以我从来不确定哪一个是正确的使用它.

.net c# pinvoke winapi dword

31
推荐指数
1
解决办法
4万
查看次数

从.net 4 c#中取消阻止文件

是否有可能从ac#program中取消阻止从Internet下载的文件.浏览互联网我已经了解到,信息是在包含当前区域信息的(NTFS)文件的替代流中写入的(值3来自互联网并被解释为被阻止).

是否有管理的可能性来清除或更改文件的区域信息(解除阻止),或者是否存在托管复制功能,复制没有区域信息的文件?如果没有,我如何处理PInvoke但不包括外部程序集(我不允许在当前项目中执行此操作).

.net c# pinvoke .net-4.0 alternate-data-stream

29
推荐指数
3
解决办法
1万
查看次数

CUDA for .net?

我知道有很多CUDA语言绑定,比如PyCUDA,但是.Net 有什么好的绑定吗?我见过的唯一一个是这个,但我想知道是否还有其他人.

.net pinvoke interop language-binding cuda

27
推荐指数
3
解决办法
8082
查看次数

C#P在64位系统上调用user32.dll

在64位应用程序中,在64位Windows上pinvoke user32.dll是错误的吗?我成功完成了很多次并且从未出现过错误,但这似乎是矛盾的.我应该寻找user64.dll吗?

c# 64-bit pinvoke 32-bit user32

26
推荐指数
1
解决办法
2万
查看次数

检测笔记本电脑盖关闭和打开

是否可以检测笔记本电脑的盖子何时打开或关闭?从我所读到的,这是不可能的,但是SO已经帮助我完成了不可能的事情.

我发现的唯一可能是正确的方向是MSDN博客文章,关于报告电源按钮所需的IOCTL.操作系统调用它们是否有可能"嗅"这些?

我正在使用VB.NET,但会接受任何语言的建议.感谢您的时间和建议.

编辑:我的软件将(最终)覆盖盖子关闭时发生的操作(基于用户偏好),因此不能选择关闭盖子时通常发生的暂停和其他操作.

.net pinvoke winapi ioctl

26
推荐指数
3
解决办法
9734
查看次数

在Win32/COM方法上调用PInvoke时,通常会有明显的性能损失吗?

我想知道是否有人对管理.Net代码在Win32方法上使用DLLImport/PInvoke的负面影响有一个不错的解释或概述?

我计划使用各种Win32方法,并希望对这样做的负面影响有更深入的了解.

谢谢,

布莱恩.

.net performance pinvoke marshalling dllimport

26
推荐指数
1
解决办法
5865
查看次数

新的IntPtr(0)与IntPtr.Zero

这两个陈述之间有什么区别:

IntPtr myPtr = new IntPtr(0);
IntPtr myPtr2 = IntPtr.Zero;
Run Code Online (Sandbox Code Playgroud)

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

.net c# pinvoke

24
推荐指数
3
解决办法
2万
查看次数

在密封的类上实现IDisposable

我认为以前没有问过这个问题.我IDisposable对在密封类上实现的最佳方法感到困惑- 特别是一个不从基类继承的密封类.(也就是说,这是一个"纯密封的类",这是我的术语.)

也许你们有些人同意我的观点,因为实施指南IDisposable非常混乱.也就是说,我想知道我打算实施的方式IDisposable是充分和安全的.

我正在做一些P/Invoke代码,分配一个IntPtr通过Marshal.AllocHGlobal,自然,我想干净地处理我创建的非托管内存.所以我在考虑这样的事情

using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential)]
public sealed class MemBlock : IDisposable
{
     IntPtr ptr;
     int length;

     MemBlock(int size)
     {
           ptr = Marshal.AllocHGlobal(size);
           length = size;
     }

     public void Dispose()
     {
          if (ptr != IntPtr.Zero)
          {
               Marshal.FreeHGlobal(ptr);
               ptr = IntPtr.Zero;
               GC.SuppressFinalize(this);
          }
     }

     ~MemBlock()
     {
           Dispose();
     }    
}
Run Code Online (Sandbox Code Playgroud)

我假设因为MemBlock完全是密封的,并且永远不会从另一个实现a的类中派生出来virtual protected Dispose(bool disposing).

那么,终结者是否必须?欢迎所有的想法.

c# pinvoke

24
推荐指数
3
解决办法
7531
查看次数