结构体数组的指针的内容如何从非托管到托管...
谢谢关注...
结构体数组的指针的内容如何从非托管到托管...
部分代码如下:
//Event是结构体struct
IntPtr pEvent = new IntPtr();
int size = Marshal.SizeOf(typeof(Event));
pEvent = Marshal.AllocHGlobal(size * 1000);
uint pReadCount = 0;
if (-1 == M8_GetEventsFromBuf(ui_IP, pEvent, (uint)(size *1000), ref pReadCount))
{
Event[] events = new Event[pReadCount];
for (int k = 0; k < pReadCount; k++)
{
events[k] = new Event();
}
IntPtr ptr = new IntPtr();
ptr = Marshal.AllocHGlobal(size);
for (int i = 0; i < pReadCount; i++)
{
ptr = Marshal.ReadIntPtr(pEvent, i * size);
//问题在这里,为何ptr = 0呢?
events[i] = (Event)Marshal.PtrToStructure(ptr, typeof(Event));
...
...
再次感谢...
结构体数组的指针的内容如何从非托管到托管...
部分代码如下:
//Event是结构体struct
IntPtr pEvent = new IntPtr();
int size = Marshal.SizeOf(typeof(Event));
pEvent = Marshal.AllocHGlobal(size * 1000);
uint pReadCount = 0;
if (-1 == M8_GetEventsFromBuf(ui_IP, pEvent, (uint)(size *1000), ref pReadCount))
{
Event[] events = new Event[pReadCount];
for (int k = 0; k < pReadCount; k++)
{
events[k] = new Event();
}
IntPtr ptr = new IntPtr();
ptr = Marshal.AllocHGlobal(size);
for (int i = 0; i < pReadCount; i++)
{
ptr = Marshal.ReadIntPtr(pEvent, i * size);
//问题在这里,为何ptr = 0呢?
events[i] = (Event)Marshal.PtrToStructure(ptr, typeof(Event));
...
...
再次感谢...
...全文
相关推荐
.Net 调用 VC++ DLL 示例
**PI(Platform Invoke)服务**: Platform Invoke是.NET Framework提供的一种机制,用于让托管代码(如C#)调用非托管代码(如C++ DLL)。
C++CLI
- **数组类型**:数组在 C++CLI 中被定义为一种特殊类型,并且可以是托管或非托管的。- **类型系统的统一**:C++CLI 强调了类型系统的一致性,使得托管和非托管类型之间的交互更加流畅。
C#基础问题.doc
extern 关键字用于声明一个外部定义的函数或变量,通常用于引用 C 或其他非托管代码库的函数。4. abstract 是什么意思?
有关C#的25个问题
外部函数(extern)`extern`关键字用来声明外部函数,通常用于调用非托管代码中的函数,即P/Invoke。
.NET编码规范
**资源管理**:使用`using`语句或实现IDisposable接口来自动释放非托管资源。


