vc函数定义如下 
typedef struct _GroupCard 

    DWORD cardNo;      
    WORD  reserved;  
    WORD  wCardCount; 
    _GroupCard * pNext;      //pointer to the next group card. 
} TGroupCard, *PGroupCard; int GetCardReg(BYTE ComPort, BYTE CtrlID, WORD Offset, WORD GroupCount, WORD *GroupCountGet, TGroupCard *lpGroupCard); 我想在c#中调用,应该怎么写接口函数?

解决方案 »

  1.   

     public unsafe struct GroupCard
        {
            public uint cardNo;
            public ushort reserved;
            public ushort wCardCount;
            public GroupCard* pNext;   //或者  public IntPtr pNext 
        }int GetCardReg(byte ComPort, byte CtrlID, ushort Offset, ushort GroupCount,ref ushort GroupCountGet, ref GroupCard lpGroupCard); 
    或者
    unsafe int GetCardReg(byte ComPort, byte CtrlID, ushort Offset, ushort GroupCount,ref ushort GroupCountGet, GroupCard* lpGroupCard); 
      

  2.   


    [StructLayout(LayoutKind.Sequential)]
        class TGroupCard
        {
            public int cardNo;
            public ushort reserved;
            public ushort wCardCount;
            public TGroupCard pNext;      //pointer to the next group card. 
        }    TGroupCard PGroupCard;
      
        int GetCardReg(byte ComPort, byte CtrlID, ushort Offset, ushort GroupCount, ref ushort GroupCountGet, ref TGroupCard lpGroupCard);
      

  3.   

    用这个接口
    unsafe int GetCardReg(byte ComPort, byte CtrlID, ushort Offset, ushort GroupCount,ref ushort GroupCountGet, GroupCard* lpGroupCard);如下:
    GroupCard* lpGroupCard =null;
    ushort GroupCountGet=0;
    GetCardReg(3,1,0,3,ref GroupCountGet,lpGroupCard );
    能够执行,但lpGroupCard的值为零,不知为什么
      

  4.   

    然后用
    int GetCardReg(byte ComPort, byte CtrlID, ushort Offset, ushort GroupCount,ref ushort GroupCountGet, ref GroupCard lpGroupCard);按如下方式调用:
    int i=0;
    ...
    i=4;  
    ...
    GroupCard lpGroupCard = new GroupCard ();
    ushort GroupCountGet=0; 
    GetCardReg(3,1,0,3,ref GroupCountGet,ref lpGroupCard ); lpGroupCard 倒是取出值了,但取值是否正确我也不知道,因为我我知道原始值是多少。
    但是这有个奇怪的问题;如上面所写,我在最开始定义了一个变量i,但是当调用了这个函数后i却无缘无故地变了?这是什么原因?
      

  5.   

    用 wartim的接口方式调用时直接挂掉了。
    请大家再指点一下