'DWORD MWRF_EmitATTCard(
'    BOOL bIsBig5,           //系统繁简体
'    DWORD nCardID,          // 用户卡号(流水号),取值为0 ~ 300000 建议与消费系统取值定义为一样
'    char *strPersonID,      //用户编号(建议统一全部为0~9数字,但支持前两位为字母) 建议与消费系统取值定义为一样
'    DWORD nGrade,           // 级别,可与消费系统定义为一样
'    DWORD nAttGroup,        // 组别,0 ~ 255,对应256个分组号,
'    char *strUserKey,       //个人密码,如系统不使用,建议取值"0000"
'    char *strName,          //姓名
'    DWORD nYear,            //卡使用有效年,如系统不使用,建议取值2020
'    DWORD nMonth,           //卡使用有效月,如系统不使用,建议取值12
'    DWORD nDay,             //卡使用有效日,如系统不使用,建议取值30
'    DWORD *TagSN            // IC卡原始序列号
');
Public Declare Function MWRF_EmitATTCard Lib "gscmd.dll" (ByVal bIsBig5 As Boolean, ByVal nCardID As Long, ByVal strPersonID As String, _
   ByVal nGrade As Long, ByVal nAttGroup As Long, ByVal strUserKey As String, ByVal strname As String, ByVal nYear As Long, _
   ByVal nMonth As Long, ByVal nDay As Long, ByRef TagSN As Long) As Long

解决方案 »

  1.   

    用 varptr 可以获得变量的地址,也就是指针
    对于字符串比较特殊一点
    你的例子太长了,懒得写咱们举一个简单的
    比如C里面的函数定义为 long test(char   *strIn){……}
    VB里面声明他Public DeclareFunction test Lib   "gscmd.dll "   (ByVal strIn as long) as long调用的时候
    dim strIn as string 
    dim strTmp() as byte
    dim point as long 
    strin ="abcd"
    strtmp = strconv(strin & Chr(0),vbfromunicode) '把字符串转换成字节数组,并且加上C语言中字符串的结束符
    point = varptr(strtmp(0))  '获取字节数足首元素的地址,这就是指针了
    test(point)
      

  2.   

    C中的BOOL是4字节,在VB中应该用Long代替。
      

  3.   

            'DWORD   MWRF_EmitATTCard( 
    '         BOOL   bIsBig5,                       //系统繁简体 
    '         DWORD   nCardID,                     //   用户卡号(流水号),取值为0   ~   300000   建议与消费系统取值定义为一样 
    '         char   *strPersonID,             //用户编号(建议统一全部为0~9数字,但支持前两位为字母)   建议与消费系统取值定义为一样 
    '         DWORD   nGrade,                       //   级别,可与消费系统定义为一样 
    '         DWORD   nAttGroup,                 //   组别,0   ~   255,对应256个分组号, 
    '         char   *strUserKey,               //个人密码,如系统不使用,建议取值 "0000 " 
    '         char   *strName,                     //姓名 
    '         DWORD   nYear,                         //卡使用有效年,如系统不使用,建议取值2020 
    '         DWORD   nMonth,                       //卡使用有效月,如系统不使用,建议取值12 
    '         DWORD   nDay,                           //卡使用有效日,如系统不使用,建议取值30 
    '         DWORD   *TagSN                         //   IC卡原始序列号 
    '); 
    Public Declare Function MWRF_EmitATTCard Lib "gscmd.dll"(ByVal bIsBig5 As Long, ByVal nCardID As Long, ByVal strPersonID As String,   _ 
          ByVal nGrade As Long, ByVal nAttGroup As Long, ByVal strUserKey As String, ByVal nMonth As Long, ByVal nDay As Long, ByRef TagSN As Long)As Long注意 Boolean, VB 中它占用 1 字节,-1 是 True, 0 是 False。在 C++ 中, BOOL 是 int 型, 1 是 TRUE.
      

  4.   

    去这里看看.
    http://labs.developerfusion.co.uk/convert/csharp-to-vb.aspx转换结果不是很完美,不过可以参考.
      

  5.   

    简单啊没指针 用数组啊给你参考 呵呵 'apiReturn _stdcall Net_GetNetwork(SOCKET hSocket, BYTE *IP_Address, int *Port, BYTE *Mask, BYTE *Gateway);
     Declare Function Net_GetNetwork Lib "Reader2600DLL.dll" ( _
     ByVal m_hScanner As Long, _
     ByRef ip_address As Byte, _
     ByRef Port As Long, _
     ByRef mask As Byte, _
     ByRef Geteway As Byte _
     ) As apiReturn
      

  6.   

    除ByVal   bIsBig5   As   Boolean,应为ByVal   bIsBig5   As   long 外,其它没错,是字符型要传值时要声明为定长字符串.