我在VC里写了一个接口,并把其做成了动态库(DLL),其中接口的参数是一个结构指针,结构是由几个字符数组组成的。现在在DELPHI里调用该接口,在把结构传入接口前,已经为第一个字符数组赋了值,结果,调用完该接口,结构里的内容整体向后偏移了4个字节,前面填充了4个字节的乱码。而且,我在接口里面什么都不做,也是这种情况。哪位能帮我解决一下,不胜感激。

解决方案 »

  1.   

    字符数组千万不要使用 delphi 的string类型。
      

  2.   

    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=189529  ?gz
      

  3.   

    要注意vc和delphi的数据类型转换
      

  4.   

    可能是你用的紧凑型的数组。紧凑型的数据和非紧凑型的在内存中所占的大小可是不一样的啊 !
    delphi 时候使用了packed 编译选项啊。
      

  5.   

    delphi 的数组和c的对应关系
    Delphi Size/Values C++ implementation ImplementationShortInt 8-bit integer signed char typedef
    SmallInt 16-bit integer short typedef
    LongInt 32-bit integer int typedef
    Byte 8-bit unsigned integer unsigned char typedef
    Word 16-bit unsigned integer unsigned short typedef
    Integer 32-bit integer int typedef
    Cardinal 32-bit unsigned integer unsigned int typedef
    Boolean true/false bool typedef
    ByteBool true/false or 8-bit unsigned integer unsigned char typedef
    WordBool true/false or 16-bit unsigned integer unsigned short typedefLongBool true/false or 32-bit unsigned integer BOOL (WinAPI) typedef
    AnsiChar 8-bit unsigned character char typedef
    WideChar word-sized Unicode character wchar_t typedef
    Char 8-bit unsigned character char typedef
    AnsiString Delphi AnsiString AnsiString class
    String[n] old style Delphi string, n = 1..255 bytes SmallString<n> template class
    ShortString old style Delphi string, 255 bytes SmallString<255> typedef
    String Delphi AnsiString AnsiString typedefSingle 32-bit floating point number float typedef
    Double 64-bit floating point number double typedef
    Extended 80-bit floating point number long double typedef
    Real 32-bit floating point number double typedef
    Pointer 32-bit generic pointer void * typedef
    PChar 32-bit pointer to characters unsigned char * typedef
    PAnsiChar 32-bit pointer to ANSI characters unsigned char * typedef
    Comp 64-bit floating point number Comp class
    OleVariant OLE variant value OleVariant class
      

  6.   

    其中接口的参数是一个结构指针,结构是由几个字符数组组成的。写出你的结构在VC里面的定义、接口以及DELPHI的调用方式,传递参数
    比如
    typedef struct
    {
      char szBuf[20];
    } MyRec,*PMyRec;那你delphi也需要相应的定义
    type MyRec = record
      szBuf: array[0..19] of char;
    end;
    PMyRec = ^MyRec;
    而且 如果你VC里面设置为 #pragma pack(1)的话 delphi那边还要 type MyRec = packed record...
      

  7.   

    对于不同的语言间的DLL库参数类型,不建议采用Struct,最好定义一个字符串(包含N字段),各字段之间用分隔符进行分开。这样不论在何种语言之间进行调用,也不会出现兼容问题。