这是我在DLL里的函数
function Jia(Fname:pchar):integer;stdcall;
var
F_name,F_buf,F_buf1:string;
B_buf,W_buf:array of byte;
F_hand,iFileLength,iBytesRead,len:integer;
  Buffer: PChar;
  i: Integer;
   len8,ikong:longword;
len7:boolean;
F_nHand:longint;
 //[0 .. 682111]
begin
 // len := length(Fname);
 // move(Fname[1],Fname[0],len);
 // Fname[len] := #0;
  F_name:=Fname;
  showmessage(F_name);
  F_buf:='';
  try
  F_hand:=fileopen(F_name,fmShareDenyWrite);
  iFileLength := FileSeek(F_hand,0,2);
  FileSeek(F_hand,0,0);
   i:=iFileLength;
  setlength(B_buf,i+1); //Êý×éµÄ³¤¶È
  iBytesRead:= FileRead(F_hand,B_buf[0],iFileLength);
  fileclose(F_hand);
   for i := 0 to iFileLength-1 do
      begin
        F_buf1:=inttohex(B_buf[i],2);
        F_buf:=F_buf+F_buf1;
      end;
     ikong:=length(F_buf);
     setlength(W_buf,ikong+1);
     for i:=0 to ikong-1 do
     begin
        F_buf1:=copy(F_buf,i+1,1);
        W_buf[i]:=ord(F_buf1[1]);
     end;
      len8:=1;
     len7:=DeleteFile(pchar(F_name));
     showmessage(F_name);
     if len7=true then
     begin
     F_nHand:=CreateFile(pchar(F_name), GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE,NIL, OPEN_ALWAYS, 0, 0);
     len7:=writefile(F_nHand,W_buf[0],ikong,len8,NIL);
      closehandle(F_nHand);
      Jia:=1;
      end
      else
      begin
      Jia:=0;
      end;  finally
     // FreeMem(Buffer);
  end;
end;

解决方案 »

  1.   

    在 declare 的 local external function 中声明:function integer Jia(string Fname) LIBRARY "XXX.dll"
    然后,就可直接调用:
      

  2.   

    看題目時的第一個想法是:這個問題ARI回答比較合適,因為他目前正視這個想法.第二個看法久是:我靠代碼太亂了吧!
      

  3.   

    呵呵,是乱了一点,所以找高手来帮下忙啊!我在PB里这样是调用了,参数也传进去了,但就是执行
    len7:=DeleteFile(pchar(F_name));时不能成功,用delphi调用则可以成功,不解.另外PB调用
     F_nHand:=CreateFile(pchar(F_name), GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE,NIL, OPEN_ALWAYS, 0, 0);创建了文件以后,len7:=writefile(F_nHand,W_buf[0],ikong,len8,NIL);也没有写数据成功.但在delphi里,一切正常
      

  4.   

    估计你的文件路径有问题,或者, 你可以在 \ 前加 ~
    如: c:\aa\b.txt
    改成 c:\~\aa~\b.txt
      

  5.   

    试过了,不是文件路径的问题,我用showmessage返回了一些结果,就是执行fileopen时都没有得到执行成功的值