.NET 嵌入式资源,将 IntPtr 获取到原始内存位置以用于非托管代码

.NET embedded resource, getting an IntPtr to the raw memory location for use in unmanaged code

我需要向指向 .NET 嵌入式资源的本机代码公开 void*ulong size 值。

现在,我可以自己分配内存并复制数据(使用传统方法),但这些文件可能很大,所以我想尽可能避免这种情况。

有没有办法(通过原始指针)直接指向嵌入资源?是内存,还是可用于直接在文件系统上转到 .NET 库的偏移量?

根据一些测试,嵌入式资源被加载为 UnmanagedMemoryStream... 所以:

// 
UnmanagedMemoryStream stream = (UnmanagedMemoryStream)assembly.GetManifestResourceStream("DefaultNamespaceOfAssembly.FileName.jpg");
byte* ptr = stream.PositionPointer;
long length = stream.Length;

从参考源中的评论来看,该操作不应分配任何内存(您获得的指针应该指向加载到内存中的真实资源)。事实上,UnmanagedMemoryStream 不会释放 Dispose() 上的任何内存。

请注意,您问的 ulong size 有点可疑...希望您确定。 VC++ 的 unsigned long 不是 long,而 size_t 只是 64 位的 ulong,并且是 uint 32 位。