我需要向指向.NET嵌入式资源的本机代码公开void*
和ulong size
值。
现在,我可以自己分配内存并复制数据(使用传统方法),但是这些文件可能很大,所以我想避免这种情况。
是否有一种方法(通过原始指针)直接指向嵌入式资源?内存还是可以用于直接在文件系统上访问.NET库的偏移量?
答案 0 :(得分:2)
根据一些测试,嵌入式资源将以UnmanagedMemoryStream
的形式加载...因此:
// https://stackoverflow.com/a/917607/613130
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
,是32位的uint
。>