Tag: 不受管理

我怎样才能在C#stream中进入非托管内存流?

我可以使用UnmanagedMemoryStream在C#中读取非托管内存,但是我该怎么做呢? 我想从托管流直接读入非托管内存,而不是先读入一个byte []然后再复制。 我正在对大量请求进行异步流读取,因此增加的内存很重要(更不用说额外的副本)。

ERROR_MORE_DATA – PVOID和C# – 非托管类型

如何从以下DLL获取值? offreg.dll。 在我的下面的代码中,我已经成功打开了配置单元,密钥,现在我正在尝试获取密钥的值,并且我一直遇到ERROR_MORE_DATA(234)错误。 这是C ++ .dll: DWORD ORAPI ORGetValue ( __in ORHKEY Handle, __in_opt PCWSTR lpSubKey, __in_opt PCWSTR lpValue, __out_opt PDWORD pdwType, __out_bcount_opt(*pcbData) PVOID pvData, __inout_opt PDWORD pcbData ); 这是我的C#代码: [DllImport(“offreg.dll”, CharSet = CharSet.Auto, EntryPoint = “ORGetValue”, SetLastError = true, CallingConvention = CallingConvention.StdCall)] public static extern uint ORGetValue(IntPtr Handle, string lpSubKey, string lpValue, out uint […]

如何使用16字节对齐分配内存?

我使用Marshal.GlobalHAlloc来分配内存。 正如文档所说:“此方法从Kernel32.dll公开Win32 LocalAlloc函数。” GlobalAlloc的文档说它将是8字节对齐,但LocalAlloc没有说任何关于对齐的内容。 例如,我想分配1024个字节,并确保它与16对齐。当我分配1024 + 16个字节然后检查指针%16时它会工作吗? 如果结果为0则意味着内存对齐,当它不为0时,我只是增加指针以符合我的期望。 问题是我不知道,如果我有对齐指针它真的在物理内存中对齐?

C#释放IntPtr引用的内存

我正在使用一些非托管代码,它将指针(IntPtr)返回给大图像对象。 我使用引用但在完成图像后,我需要释放指针引用的内存。 目前,唯一释放内存的是关闭我的整个应用程序。 我需要能够从我的应用程序中释放内存。 这是对内存的分配。 hbitmap是返回的指针,需要取消分配。 [DllImport(“twain_32.dll”, EntryPoint = “#1”)] public static extern TwainResult DsImageTransfer( [In, Out] Identity origin, [In] Identity dest, DataGroup dg, DataArgumentType dat, Message msg, ref IntPtr hbitmap);

在c#中分配“非托管”内存

我在c#中编写一个使用C ++库的程序,由于某种原因,我需要分配一个非托管缓冲区来将它传递给lib。 有没有办法在c#中做到这一点? 基本上我只需要在C#中做一个malloc … 谢谢