别人用vc写了某些函数,我想用delphi写程序调用他的函数。假设他的函数调用形式为:
clientSendMsg(a);其中a如下下:typedef struct {
    unsigned char   npi:5;                 
    unsigned char   ton:3;
} smpp;
smpp  a;我在delphi里面该怎么定义一个record和他的这个struct匹配,让我可以用它的函数呢?
我的想法是:
type smpp=record
  case of integer
    0:(npi:byte);
    1:(ton:byte);
end;
赋给npi时,给变体结构中的npi的低5位赋值,高3位保持不变(以便不破坏保存在变体结构中的ton的值,因为ton只有高3位有用),再赋值给ton,变体结构中的ton低5位保持不变,只改变高3位。这样行吗?btw,不要建议叫对方改变他定义的结构。要是可以的话,我早就这样干了。

解决方案 »

  1.   

    npi and $1F
    ton and $F8
      

  2.   

    实际上很简单啊,你只要弄明白在c中
    typedef struct {
        unsigned char   npi:5;                 
        unsigned char   ton:3;
    } smpp;smpp  a;
    这个a是怎么存储不就行了吗,应该是连续占用一个字节的内存那么你不需要任何的数据结构,直接就用一个指向字符的指针来完成不就行了吗
    取得这个字符后,高5位是npi,低3位是ton,也许刚好反过来,你试一下不就有了吗?
      

  3.   

    to xudunyu
    那么你不需要任何的数据结构,直接就用一个指向字符的指针来完成不就行了吗
    取得这个字符后,高5位是npi,低3位是ton,也许刚好反过来,你试一下不就有了吗?我读取他的a这个结构的内容时这样当然可以像你说的那样。但是如果我通过clientSendMsg(a)这个函数把a这个结构的内容传给他的程序的时候这就不一定可以用了,因为他的程序是用vc写的,所以他读里面内容的时候就是用例如:b=a.npi。这个时候我里面如果没有这个npi那他就读不到了。
      

  4.   

    呵呵 马甲都上了>>赋给npi时,给变体结构中的npi的低5位赋值,高3位保持不变(以便不破坏保存在变体结构中的ton的值,因为ton只有高3位有用),再赋值给ton,变体结构中的ton低5位保持不变,只改变高3位。这样行吗?行有点错误
    type
      smpp=record
        case integer of
        0:(npi:byte);
        1:(ton:byte);
      end;