vb在调用delphi写的dll文件时,提示有内存错误,其中有pchar,怎样释放内存?拜托

解决方案 »

  1.   

    VB?那就自己做多一个接口,内有FreeMem就是啦
      

  2.   

    pchar是一个指针,所以你要自己分配内存,在自己释放内存
      

  3.   

    可是我用freemem的话,我用delphi测试程序测试的话就出现错误
      

  4.   

    [济南]琳子 13:49:16
    大家好,能不能帮我看看,这段代码function DoTest( AConn,S:pchar):pchar;stdcall;beginwith TForm1.Create(Form1) do
    try{ 创建窗体 }  GetMem(AConn,512);
      getmem(s,512);
         //new(aconn);
      ADOConnection1.ConnectionString:=AConn; { 获得数据库连接的实例 }  adoquery1.Connection:=adoconnection1;
      with adoquery1 do
      begin
        close;
        sql.Clear;
        sql.Add('selec * from a where kahao=:p1);
        parameters.ParamByName('p1').Value:=string(s);
        
        open;
          Result:=pchar(floattostr(fieldbyname('ye').Value/100));
           //Result:=fieldbyname('rq').Value;
      end;   //form1.ShowModal;
    finally
    //
    FreeMem(s);//这样写吗FreeMem(AConn);//这样写吗
    Form1.Free; { 调用结束时销毁窗口 }
    end;
    end;
      

  5.   

    vb在调用delphi写的dll文件,既然PChar是指针,而dll又是使用调用者的内存,所以一般的做法dll是不会去管外面传进来的参数的内存的分配和释放的,这样你的问题就是应该在vb代码中去分配pchar参数的内存,具体vb的代码怎么有没有什么分配内存我也忘记了,不过你可以调用api里的GlobalAlloc和GlobalFree等函数来分配和释放,具体用法就参见win32的sdk好了
      

  6.   

    在Delphi内不用释放
    例:function BlowFishEncryptStr(EncryptStr: String): Pchar; stdcall;function BlowFishEncryptStr(EncryptStr: String): PChar;   //encrypt string
    var
      Tempstr: string;
      tmpBlowfish: TBlowfish;
      aResult : array [0..1024]of Char;
    begin
      try
        try
          Fillchar(aResult,sizeof(aResult),0);
          tmpBlowfish := TBlowfish.create(nil);
          Tempstr := '';
          if SetupKey(tmpBlowfish) then               //(AOwner) then
          begin
            // encrypt the string
            tmpBlowfish.EncString(EncryptStr, TempStr);
          end;
          StrPcopy(aResult,TempStr);
        except
          StrPcopy(aResult,EncryptStr);
        end;
        result := aResult;
      finally
        FreeAndNil(tmpBlowfish);
      end;
    end;
      

  7.   

    DLL外释放DLL内部分配的内存,没看见这种做法,基本都是调用者分配和释放的。Windows的API使用指针型BUF时,习惯是同时传递BUF指针和BUF长度两个参数。