Access violation in MSVCR80D.dll error

I need to use a DLL created using .NET framework. This DLL is made COM visible.

I want to use this DLL in an application created using Delphi 2006. I have followed following steps:

  • Registered the DLL using regscr32.
  • Imported the type library using Delphi IDE. It created _TLB.pas file. Following signature was created in TLB file.

    function TValidationRequest.Process(var meterBSN: WideString; var NICSerial: WideString; 
                                        var partNumber: WideString; var otherConfig: WideString; 
                                        out returnMessage: WideString): Smallint;
    begin
      Result := DefaultInterface.Process(meterBSN, NICSerial, partNumber, otherConfig, returnMessage);
    end;
    
  • I tried to call the method using following code snippet.

  • procedure TForm1.buttonClick(Sender: TObject);
    var
      valReq: TValidationRequest;
      s1, s2, s3, s4, s5: WideString;
      o: WideString;
    begin
      valReq := TValidationRequest.Create (Self);
      try
        valReq.Process (s1, s2, s3, s4, o);
        MessageDlg(o, mtInformation, [mbOK], 0);
      finally
        valReq := nil;
      end;
    end;
    

    But I get following error when Process method is called. alt text http://i41.tinypic.com/2daf1ix.png

    Please can you suggest any solution?


    Try initializing the WideStrings ( s1 , s2 , s3 , s4 , and maybe even o ). If I recall correctly, they are dynamic in Delphi and nil (000000000) before you set them up.


    In addition to what MarkusQ said, note that your memory management of the TValidationRequest object is not so good. It would be cleaner to use Create(nil) and then in the finally -block write FreeAndNil(valReq) . The way it is now you create one TValidationRequest object every time you click the button and they will all stay in memory until you destroy the form. At least you won't get memory leaks because you passed Self to the constructor so at least the form will take care of destroying those objects. In your example there is really no need to keep the object alive after the TForm1.buttonClick method has ended.

    链接地址: http://www.djcxy.com/p/35080.html

    上一篇: ProgressBar在tListview子项Delphi中

    下一篇: 访问冲突MSVCR80D.dll错误