0

我试图通过这个结构:

#pragma unmanaged
typedef struct
{
   void* data;
   unsigned nlen;
   unsigned int type; 
} PARAMETER;

对这个类的静态方法:

#pragma managed
private class __gc GlobalFunctions
{
   static void WriteField(Object* object, PARAMTER& par, unsigned dec)
   {
       switch (par.type)
       {
          ....
       }
   }
};

从这个函数:

public class __gc WorkerClass
{
   void SetValueAt(long index, Object* value)
   {
      PARAMETER aux;
      aux.type = 3;
      GlobalFunctions::WriteField(value, aux, 0);
   }
};

在 64 位系统上,我收到访问冲突,指出无法读取地址“0x000c”。

现在,在 64 位系统上,如果 par 的引用是空指针,则 par.type 的取消引用将是 0x0c 的地址。除了 par 在堆栈上 - 我没有将空指针传递给 WriteField,但我似乎得到了一个。

现在,在托管 C++ 中,当从一个托管类实例方法调用另一个静态方法时,我通过引用传递非托管结构这一事实是否容易受到某种编组问题的影响?

是否有任何 Web 文档解释托管代码如何处理非托管结构?

4

1 回答 1

0

将托管和非托管代码显式编译为托管/非托管。如果托管代码和非托管代码混合在同一个文件中,则需要使用 pragma managed 和 pragma unmanaged。使用包含文件时也要记住这一点。

于 2009-07-28T02:01:22.323 回答