路过的高手请帮帮忙,有个问题希望大家能给提供帮助。我现在做的一个开发项目,需要调用vc写的动态链接库,函数调用没问题,但是数据上报的时候出现问题。
     情况是这样的,初始化的时候提供给dll一个窗口句柄,用户上报数据时触发窗口消息,在窗口消息的LPARAM参数里写的书一个struct结构的指针,我从这个指针里面取出相应的数据。问题是,我用delphi和vc取出来的数据有一部分不一致,已经考虑到了数据对齐的问题,而且我已经从两个程序里取出了16进制的数据块内容,但是就是不一样,请问到底是什么问题,什么情况会引发这样的问题出现

解决方案 »

  1.   

    最好是用
    TRec = packed record
    end;
      

  2.   

    因为对方是有数据对齐的,所以我这就没有用Packed record 的方式,
    从CPU的debug上看,数据对齐没有问题,相对位移都是一致的
      

  3.   

    字符串是用的字符数组
    windindance(风舞轻扬·白首为功名),请问delphi 和vc 的字节高低位顺序是怎么排列的啊?
      

  4.   

    在某些情况下,int的高位和低位是反的……
    具体怎样设置偶也忘记了……
      

  5.   

    type PTTInt = LongInt;
    type
     PTTDATA = record
      line1State : byte;
      line2State : byte;
      line1telephoneNumber : array[0..23] of char;
      line2telephoneNumber : array[0..23] of char;
      newKey1 : array[0..23] of char;
      newKey2 : array[0..23] of char;
      line1pttBuffer : array[0..23] of char;
      line2pttBuffer : array[0..23] of char;
      line1pttDirection : PTTInt;
      line2pttDirection : PTTInt;
      keyHandset1 : PTTInt;
      keyHandset2 : PTTInt;
      keyHandfree1 : PTTInt;
      keyHandfree2 : PTTInt;
      keyPTT1 : PTTInt;
      keyPTT2 : PTTInt;
      keyCOS1 : PTTInt;
      keyCOS2 : PTTInt;
      IO : array[0..7] of PTTInt;
      line1audio1 : PTTInt;
      line1audio2 : PTTInt;
    end;
      

  6.   

    顺序不存在问题,现在的问题是我做了内存快照,
    在vc和delphi程序里同样的设备状态可是上传的数据
    却不相同。
      

  7.   

    在VC里怎么定义 PTTInt的? 
    C++中int类型,不管有无符号,都是两个字节;而delphi的Int是四个字节,LongInt与Int一样,都是四字节。
      

  8.   

    不是吧,vc里的int类型一定是两个字节吗?
    我定义的PTTint是在delphi里面写的
      

  9.   

    byte line1State;
        byte line2State;
        char line1telephoneNumber[24];
        char line2telephoneNumber[24];
        char newKey1[24];
        char newKey2[24];
        char line1pttBuffer[24];
        char line2pttBuffer[24];
        long line1pttDirection; //或者int
        long line2pttDirection;
        long keyHandset1;
        long keyHandset2;
        long keyHandfree1;
        long keyHandfree2;
        long keyPTT1;
        long keyPTT2;
        long keyCOS1;
        long keyCOS2;
        long IO[8];
        long line1audio1;
        long line1audio2;老兄如果VC的结构是这样的话,应该就不是结构的问题
      

  10.   

    老兄你测试一下,两边结构大小是否一致,
    还有就是你DELPHI的转换是否正确,
    我测试了一下,没有什么问题,我是直接返回的一个结构指针,
    其内存是在DLL中分配的堆上的内存
      

  11.   

    dll 入口函数, delphi 定义有没加 __stdcall? 贴上来看看
      

  12.   

    用消息传递也没有问题啊,你的消息不会低于WM_USER范围吧?
      

  13.   

    delphi在用array of longint作参数时,会传入两个参数,一是数组地址,二是数组长度,这样栈中就有问题了
    所以,只能用pinteger或pointer作参数,不要用array of longint//抄来的,不知道是不是这样.