路过的高手请帮帮忙,有个问题希望大家能给提供帮助。我现在做的一个开发项目,需要调用vc写的动态链接库,函数调用没问题,但是数据上报的时候出现问题。
情况是这样的,初始化的时候提供给dll一个窗口句柄,用户上报数据时触发窗口消息,在窗口消息的LPARAM参数里写的书一个struct结构的指针,我从这个指针里面取出相应的数据。问题是,我用delphi和vc取出来的数据有一部分不一致,已经考虑到了数据对齐的问题,而且我已经从两个程序里取出了16进制的数据块内容,但是就是不一样,请问到底是什么问题,什么情况会引发这样的问题出现
情况是这样的,初始化的时候提供给dll一个窗口句柄,用户上报数据时触发窗口消息,在窗口消息的LPARAM参数里写的书一个struct结构的指针,我从这个指针里面取出相应的数据。问题是,我用delphi和vc取出来的数据有一部分不一致,已经考虑到了数据对齐的问题,而且我已经从两个程序里取出了16进制的数据块内容,但是就是不一样,请问到底是什么问题,什么情况会引发这样的问题出现
解决方案 »
- 奇怪,修改数据库的记录怎么会还原?
- 请教一个FireBird 数据库中 SQl 的写法
- fastreport 问题,熟悉的帮忙解答啊!!!
- 用微软的ado对象访问数据库时,向里面田加内容时,可不可已直接把文本框的内容付给字段?
- 怎么在delphi程序中播放mp3格式的音乐??有这样的控件吗??急,在线等待
- 保存电脑技巧的问题。
- 请问在金蝶财务软件里的数据库是如何实现的!
- 关于Query的使用问题,请指教
- 如何使程序更加小巧
- 已经有80分了,我该怎么办 ,为什么我的专家分加不上
- Tchar中 x轴是日期,该怎么设定??????谢谢高手们救命!
- 【Form执行Showmodal后关闭,变量未清除问题】
TRec = packed record
end;
从CPU的debug上看,数据对齐没有问题,相对位移都是一致的
windindance(风舞轻扬·白首为功名),请问delphi 和vc 的字节高低位顺序是怎么排列的啊?
具体怎样设置偶也忘记了……
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;
在vc和delphi程序里同样的设备状态可是上传的数据
却不相同。
C++中int类型,不管有无符号,都是两个字节;而delphi的Int是四个字节,LongInt与Int一样,都是四字节。
我定义的PTTint是在delphi里面写的
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的结构是这样的话,应该就不是结构的问题
还有就是你DELPHI的转换是否正确,
我测试了一下,没有什么问题,我是直接返回的一个结构指针,
其内存是在DLL中分配的堆上的内存
所以,只能用pinteger或pointer作参数,不要用array of longint//抄来的,不知道是不是这样.