请问大家,我在delphi中申明的类型 TSetUnit
Type
       TSetUnit=record
          UnitStartID:Word;
          UnitCount:Word;
end;
导出delphi的dll函数为:function HK_SetUnitInfo(HKID:Word;var unitf:TSetUnit):smallint;stdcall在C++中申明结构体类型为:
  struct  TUnit
  {
unsigned long UnitStartID;
unsigned long UnitCount;
//char* UnitName[30];
   };
申明函数原型为:typedef int (_stdcall* HK_CALL_DELPHI)(long* hkid,TUnit* unit);
调用传递的时候,在C++中new一个unit对象,设置成员变量的值后传递过去,dll的dll函数中unitstartid值显示的是对了,unitcount值不对,整个函数返回值也不正确。请问大家,这是为什么,焦急中。

解决方案 »

  1.   

    改下声明试试
    TSetUnit = packed record
        UnitStartID: Word;
        UnitCount: Word;
      end;
      

  2.   

    数据类型长度问题噢.. 这个你要看你你电脑上运行后 unsigned long 占用的长度噢另外不要忽略了, 不足4字节的长度, 会按4字节对应噢
      

  3.   

    delphi中word类型是16位的,c中long是一般是32位的。
      

  4.   

    C++定义类型也要是WORD,长度才一样.
      

  5.   

    unsigned short int也行
      

  6.   

    Word 是16位的
    unsigned long  是32位的
      

  7.   

    注意一下Win32中的结构体,若要用在API中,要么使用指向结构体的指针,要么在结构体中增加一个cbSize域,记录该结构体的大小。这个域由API的调用者来填充,而在API内部就读取该大小内存区域,保证数据传输的准确性。你不妨借鉴一下这个方法。