有C语言函数如下
函数名称:int WINAPI  DJConf_GetGroupInfo ( WORD wGroupNo, 
                GROUP_INFO *TmpGroupInfo )
入口参数: wGroupNo ● 会议组号
           TmpGroupInfo ● 指针:指向结构GROUP_INFO
函数返回:  0    ● 成功
            -1   ● wGroupNo超出范围
功能描述:
获得当前某一组会议的有关信息。
在调用前,由应用程序负责分配结构GROUP_INFO的空间,然后将指针传给本函数。当调用完成后,在结构GROUP_INFO中将存有系统信息。#define MAX_MEMBER_NUM_PER_GROUP 32
typedef struct {
BYTE cbMode; // 在会议组中的方式
BYTE cbChnlType; // 通道类型
WORD wChnlNo; // 通道号
         WORD wResNo;      // 占用的MVIP通道(时隙)号
         WORD wLDNo; // 内部用
} MEMBER_INFO; // 成员信息typedef struct {
WORD wMemberNum; // 本组会议当前的总成员数
WORD wResNum; // 本组会议占用的会议资源数
WORD wListenNum; // 本组会议中听的成员数
MEMBER_INFO MemberInfo[MAX_MEMBER_NUM_PER_GROUP]; // 成员信息
} GROUP_INFO;
我在Delphi里为:const MAX_MEMBER_NUM_PER_GROUP = 32;
type MEMBER_INFO= record        //成员信息
     cbMode: BYTE;              //在会议组中的方式
     cbChnlType: BYTE;          //通道类型
     wChnlNo: WORD;             //通道号
     wResNo: WORD;              //占用的MVIP通道(时隙)号
     wLDNo: WORD;               //内部用
end;
type GROUP_INFO= record         //会议组信息
     wMemberNum: WORD;          //本组会议当前的总成员数
     wResNum: WORD;             //本组会议占用的会议资源数
     wListenNum: WORD;          //本组会议中听的成员数
     MemberInfo: array[0..MAX_MEMBER_NUM_PER_GROUP] of MEMBER_INFO;  //成员信息
end;function DJConf_GetGroupInfo(wGroupNo : WORD; TmpGroupInfo : GROUP_INFO): integer;  stdcall; far external 'tce1_32.dll'; //引用,tce1_32.dll为一动态链接库,JConf_GetGroupInfo为其一函数。var
 groupinfo: GROUP_INFO;调用:
  DJConf_GetGroupInfo(1,groupinfo);问题:
上面的引用是否正确?
调用是否正确?
如果不对,主问应该怎样?

解决方案 »

  1.   

    int WINAPI  DJConf_GetGroupInfo ( WORD wGroupNo, GROUP_INFO *TmpGroupInfo )这里的参数GROUP_INFO *TmpGroupInfo为GROUP_INFO类型的指针……在这里你的定义有点偏差……再定义一个:
    type
      PGROUP_INFO = ^GROUP_INFO;function DJConf_GetGroupInfo(wGroupNo : WORD; TmpGroupInfo : PGROUP_INFO): integer;  cdecl;external 'tce1_32.dll';var
     groupinfo: PGROUP_INFO;DJConf_GetGroupInfo(1,groupinfo);你可以这样子试试,不保证完全正确,^_^
      

  2.   

    不同的C编译器对于字段对齐做法不同的,一般愿意让其他语言调用的函数用的结构体都是紧缩对齐的,
    在record前面加上packedtype GROUP_INFO=packed record //会议组信息
    wMemberNum: WORD; //本组会议当前的总成员数
    wResNum: WORD; //本组会议占用的会议资源数
    wListenNum: WORD; //本组会议中听的成员数
    MemberInfo: array[0..MAX_MEMBER_NUM_PER_GROUP] of MEMBER_INFO; //成员信息
    end;function DJConf_GetGroupInfo(wGroupNo : WORD;var TmpGroupInfo : GROUP_INFO): integer; stdcall; far external 'tce1_32.dll'; //引用,tce1_32.dll为一动态链接库,JConf_GetGroupInfo为其一函数。