Frage

Ich brauche eine DLL zu verwenden, erstellt .NET Framework. Diese DLL wird COM sichtbar.

Ich mag diese DLL in einer Anwendung verwenden, erstellt mit Delphi 2006 Ich habe folgende Schritte durchgeführt:

  1. Hier die DLL mit regscr32.
  2. der Typ-Bibliothek importiert mit Delphi-IDE. Es schuf _TLB.pas Datei. Nach der Unterzeichnung wurde in TLB-Datei erstellt.

    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;
    
  3. Ich habe versucht, die Methode aufzurufen mit folgender Code-Schnipsel.

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;

Aber ich bekomme folgende Fehlermeldung bei Prozessmethode aufgerufen wird. alt text

Bitte können Sie vorschlagen, eine Lösung?

War es hilfreich?

Lösung

Versuchen Sie, die WideStrings Initialisieren (s1, s2, s3, s4, und vielleicht sogar o). Wenn ich mich richtig erinnere, sind sie dynamisch in Delphi und nil (000000000), bevor Sie sie einrichten.

Andere Tipps

Zusätzlich zu dem, was MarkusQ sagte, beachten Sie, dass Ihre Speicherverwaltung des TValidationRequest Objekt ist nicht so gut. Es wäre sauberer Create(nil) zu verwenden und dann im finally-Blockschreib FreeAndNil(valReq). Die Art und Weise wird es Ihnen jetzt ein TValidationRequest-Objekt zu erstellen, jedes Mal, wenn Sie auf die Schaltfläche klicken und sie werden im Speicher alle bleiben, bis Sie das Formular zerstören. Zumindest werden Sie nicht Speicherlecks, weil Sie Self an den Konstruktor übergeben, so zumindest die Form Pflege zu zerstören diese Objekte nehmen. In Ihrem Beispiel gibt es wirklich keine Notwendigkeit, das Objekt am Leben zu halten, nachdem die TForm1.buttonClick Verfahren beendet sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top