vc中是如下定义的。
typedef struct tagINVOICEDATA {
char szFpCryptograph[88];
char szFpEnVersion[8];
char szFpCode[16];          
char szFpSeriaoNo[16];
char szFpDate[16];
         char     szFpBuyerTaxNo[16];
char szFpSellerTaxNo[16];
char szFpSum[32];
char szFpTaxRate[16];  
char szFpTax[32];
char szFpTotal[32];
char szFpImage[224]; 
char szFpCodePrinted[16];   
char szFpSNPrinted[16];
} INVOICEDATA, *PINVOICEDATA;请问下delphi下怎样定义tagINVOICEDATA ???

解决方案 »

  1.   

    type 
      tagINVOICEDATA = record
        szFpCryptograph: array [0..87] of char;
        szFpEnVersion: array [0..7] of char;
        ....  { 后面的定义类似 }
      end;
      INVOICEDATA = tagINVOICEDATA;
      PINVOICEDATA = ^tagINVOICEDATA;
      

  2.   

    type 
      tagINVOICEDATA = record
        szFpCryptograph: array [0..87] of char;
        szFpEnVersion: array [0..7] of char;
        ....  { 后面的定义类似 }
      end;
      INVOICEDATA = tagINVOICEDATA;
      PINVOICEDATA = ^tagINVOICEDATA;
      

  3.   

    我这样做了,可是为什么报 expected ':' but '=' not found???
      

  4.   

    放错地方了。
    但现在INVOICEDATA = tagINVOICEDATA 这一句有问题
    提示没有定义的变量tagINVOICEDATA 
      

  5.   

    tagINVOICEDATA 是类型,不是变量啊! 你原始代码的其他地方肯定还有问题,把你认为可能有错的代码贴到一个新的项目中看看是否有错,然后一步步排查错误!
      

  6.   

    我重新写的一遍,就ok了。
    还有在vc中定义的函数。int  WINAPI FpGetNewPage(PINVOICEDATA lpFpBuffer);PINVOICEDATA  就是上面写的。在delphi中应该怎样调用 。
    Function FpGetNewPage(lpFpBuffer:record) ;StdCall external 'scanreco.dll' ;
    这样不行,
    应该怎样写
      

  7.   

    type
      ……
      PINVOICEDATA = ^tagINVOICEDATA;function FpGetNewPage(lpFpBuffer: PINVOICEDATA): integer; stdcall; external 'scanreco.dll' ;
      

  8.   

    那我在函数中怎样用呢?
    procedure Tfrm_query.Button1Click(Sender: TObject);
    var filename: String ;
        str12:Pchar ;
        aa:Integer ;
    begin OpenDialog1.Execute ;filename := OpenDialog1.FileName ;application.MessageBox(pchar(filename),'a',0);Str12 :=  pchar(filename) ;n.szFpImage := Str12 ;aa := FpGetNewPage(n) ;end;那现在我要用这个函数FpGetNewPage,函数中的参数应该写哪一个??
    而且怎样把它的child,szFpImage 的赋值为str12
    注意str12是pchar,而szFpImage 是array
      

  9.   

    为什么在vc中struct定义的char,在delphi中用array.
      

  10.   

    老兄,这些东西跟 c、c++ 是一样的啊!你查查 Delphi 里面有没有从 pchar 转换成 array 的函数;如果没有,自己编个函数,在里面用个循环就可以解决问题啊!跟 c 里面的 strcpy 是一个道理嘛!另外注意你的两个语句 n.szFpImage := Str12 ; 和  aa := FpGetNewPage(n); 在这里 n 的类型到底是什么? 你这两个语句肯定有一个是错的!如果 n 是 INVOICEDATA,那么应该是 aa := FpGetNewPage(@n); (这种写法还不见得对)
    如果 n 是 PINVOICEDATA,那么应该是 n^.szFpImage := Str12; 这里还要假设pchar 能够赋值给 array,而且 n 是个指针,它所指向的内存你分配过吗? 如果没有,程序肯定会出现 EAccessViolation 异常!唉,想得你的分可真难!
      

  11.   

    array to string:
    String:=PChar(@Array[0]);
      

  12.   

    谢谢: leapmars(流铭) 
    为什么delphi上赋值给array不对
    原码如下:
    for bb := 1 to length(filename) do
      begin
         n.szFpImage[bb]  := pchar(copy(filename,bb,1));
      end;
      

  13.   

    tagINVOICEDATA = record
    szFpCryptograph:String[88];
    szFpEnVersion:String[8];
    szFpCode:String[16];          
    szFpSeriaoNo:String[16];
    szFpDate:String[16];
             szFpBuyerTaxNo:String[16];
    szFpSellerTaxNo:String[16];
    szFpSum:String[32];
    szFpTaxRate:String[16];  
    szFpTax:String[32];
    szFpTotal:String[32];
    szFpImage:String[224]; 
    szFpCodePrinted:String[16];   
    szFpSNPrinted:String[16];
    INVOICEDATA:Pointer;
        end;
        
        PINVOICEDATA = ^tagINVOICEDATA;使用过程中,把一个PINVOICEDATA结构传给tagINVOICEDATA.INVOICEDATA就行了。
      

  14.   

    for bb := 0 to length(filename) - 1 do
      begin
         n.szFpImage[bb]  := filename[bb];
    end;
      

  15.   

    leapmars(流铭) 
    这样写不行,pchar与char
    现在我用 StrPCopy(n.szFpImage[bb],copy(filename,bb+1,1)) ;值成功传入。
    但是调用函数时,不提示出错,
    但返回的值根本不对。
    在delphi中用pchar传入是不是要分配地址?
    要怎样分配
      

  16.   

    我试过的,怎么会不行呢?!你自己调试看看,你能确定值传入成功了吗? 还有,是不是你的 dll 函数有问题呢?另外,就你的这个程序来看,应该在 调用函数(不是 dll 函数)中分配内存,其实就是定义一个结构变量 var  n: INVOICEDATA; 即可!
      

  17.   

    我现在就是定义 
    var  n: INVOICEDATA照 你这样说,
    我在delphi中根本不需要对 INVOICEDATA 分配地址??
      

  18.   

    你在调用函数中 这样定义的话var  n: INVOICEDATA,就是已经在栈中分配了结构体的内存啊!