int WINAPI CNGPSendSingle( 
int nNeedReport, 
int nMsgLevel, 
const char* sServiceID,
int nMsgFormat, 
                  const char* sFeeType,
const char* sFeeCode,
int nFeeUserType,
const char* sValidTime,
const char* sAtTime,
const char* sChargeTermID,
const char* sDestTermID,
int nMsgLen, 
const char* sMsgContent, 
char* sMsgID,
int* pnErrorCode,
                  BYTE* pnCongestionState
int nSubType,
const char* sSrcTermID );

解决方案 »

  1.   

    WINAPI => 调用约定stdcall
    const char* x => const x: PChar
    BYTE* => PByte
    int => Integer
      

  2.   

    char*  sMsgID, 字段是函数的返回变量我定义成 var sMsgID:pchar;
    可是返回值的字节数就是不构,可是用c调用该动态库就没有问题,
    不知道还有什么要注意的地方吗?
      

  3.   

    String类型
    WideString 类型和 Array of char 都是用过了 都不行
    郁闷啊
      

  4.   

    把var去掉,你没系统学过?如果说多加var还可以理解,那用String/WideString去试就说明你基础学的太糟糕了。个人建议还是学点基础语法吧,C其实也是必须学的基础知识。
      

  5.   

    还有一些转换要注意的就是,C里面的指针经常当数组使用,而且,明明看到是:BYTE*或char*,如果你只是转一个@B, @C,只有一个字节的容量,那么,就会内存访问错误的。因为给的空间不够。所以,有时还是小心点。自己多试试就出来了。
      

  6.   

    那我可不可以用array of char 代替char*  sMsgID呢,使用前又该 怎么分配内存大小呢
    ,我用动态数组试了试,然后动态库 就报错乐什么也没有.还有高手能指点不,谢谢
      

  7.   

    一般加const的是传入参数,不是指向,也属于传入。如果不加,只是一个指针,那说明是返回参数。
    sMsgID: array [0..1024] of Char,够长了吧,再丢进去还错的话,偶就不知道
      

  8.   

    如果是char*类型输出参数,它应该还有一个相应的int类型参数,作用是指示前者的大小,以及前者为NULL时返回需要的大小