我不太清楚,Ref,Out参数应该有帮助。你可以看看MSDN。

解决方案 »

  1.   

    用于表示指针或句柄的平台特定类型。有关此类型所有成员的列表,请参阅 IntPtr 成员。System.Object
       System.ValueType
          System.IntPtr[Visual Basic]
    <Serializable>
    Public Structure IntPtr
       Implements ISerializable[C#]
    [Serializable]
    public struct IntPtr : ISerializable[C++]
    [Serializable]
    public __value struct IntPtr : public ISerializable[JScript] 在 JScript 中,可以使用 .NET Framework 中的结构,但不能定义自己的结构。线程安全
    此类型对多线程操作是安全的。备注
    IntPtr 类型被设计成整数,其大小适用于特定平台。即是说,此类型的实例在 32 位硬件和操作系统中将是 32 位,在 64 位硬件和操作系统上将是 64 位。IntPtr 类型可以由支持指针的语言使用,并可作为在支持与不支持指针的语言间引用数据的一种通用方式。IntPtr 对象也可用于保持句柄。例如,IntPtr 的实例广泛地用在 System.IO.FileStream 类中来保持文件句柄。IntPtr 类型符合 CLS,而 UIntPtr 类型却不符合。只有 IntPtr 类型可用在公共语言运行库中。UIntPtr 类型大多数是提供来维护与 IntPtr 类型之间的体系结构上的对称性。
      

  2.   

    例如 var = field.Type 。
      

  3.   

    系统的Handle之类的可以用Intptr
    如果只是字符串的指针可以直接用ref,out就可以了!
    主要是你调用的dll文件的函数决定的!
      

  4.   

    用unsafe指示,然后直接给DLL传指针
      

  5.   

    如果 &type 是一个结构指针呢。
    我如何得到返回的type结构的值。
      

  6.   

    c#定义结构时要用到
    FieldOffsetAttribute 
    StructLayoutAttribute
    ArrayWithOffset
    等东西
    别人原来告诉过我
    可是我....忘了
      

  7.   

    看看这个
    [StructLayout(LayoutKind.Explicit)]  
    public struct Rect 
    {  
    [FieldOffset(0)] public int left;  
    [FieldOffset(4)] public int top;  
    [FieldOffset(8)] public int right;  
    [FieldOffset(12)] public int bottom;  

    [DllImport("User32.dll")]
    public static extern void ClipCursor(ref Rect rect);
    结构中如果包含c语言的数组,也有办法,不过我忘了,找到了再告诉你
      

  8.   

    顶一下,那个liqianhong(孤独流星)还没讲完!
      

  9.   

    在项目配置、生成里面把禁用不安全代码设置为False,然后用unsafe关键字,再传给dll!
      

  10.   

    参考liqianhong(孤独流星)的,没错。
    结构体中有数组的字段也一样,只是字符数组的处理方式不太一样,要加这个属性:
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] // 大小自定
    string somename,
    ...
      

  11.   

    这是一个获取本地所有端口的函数,请参考:
     [DllImport("TcpUdpPort.dll",EntryPoint="GetPortInfo")]
      public extern static void GetPortInfo(IntPtr outBuf, out int portNumber);函数原型:
    void GetPortInfo(PortStruct *Portbuf,int *PortNumber)调用:void GetAllPortInfo(ref ArrayList portList)
    {
    IntPtr portInfor = (IntPtr)Marshal.AllocHGlobal(Marshal.SizeOf(typeof(PortStruct)) * 512);
    int  PortCount = 0;
    GetPortInfo(portInfor, out PortCount);
    if(PortCount>0)
    {
    PortStruct[] Ports = new PortStruct[PortCount];
    IntPtr current = portInfor;
    for (int i=0; i<PortCount; i++)
    {
    Ports[i] = (PortStruct)Marshal.PtrToStructure(current,typeof(PortStruct));
    current=(IntPtr)((int)current+Marshal.SizeOf(typeof(PortStruct)));
    portList.Add(Ports[i]);
    }
    }
    Marshal.FreeHGlobal(portInfor);
    }