Announcement

Collapse
No announcement yet.

Delphi und VB, Oje!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delphi und VB, Oje!

    Meine Delphi DLL führt für eine VB Applikation verschiedene Datenbankzugriffe aus.
    Neben anderen Problemen stürzt die VB Applikation ab, wenn 3-4 Mal die
    Funktion MessageDlg in der Delphi DLL verwendet wurde.

  • #2
    Hallo,

    das hört sich so an, als ob bei den String-Parametern unsauber gearbeitet wird. Wie sieht eine konkrete Schnittstellenprozedur in der Delphi-DLL aus, die von VB aus aufgerufen wird

    Comment


    • #3
      Hallo Herr Kosch,
      danke für Ihre Antwort.
      Im Moment läuft das Teil produktiv, dachte aber zwichenzeitlich, dass daraus nie etwas wird.
      PC_RESULT wird mit eiber Grösse von 201 erzeugt und später gelöscht. Die Grösse 201 ist eigentlich
      ausreichend, sonst würde ich pc_result nochmal vergrössern.

      Interface
      function KntSpeichern(Satz:PCHAR):PCHAR; StdCall;

      Implementation
      function KntSpeichern(Satz:PChar):PCHAR;StdCall;
      VAR Kontaktarts,KontaktanlassS, KontaktergebnisS,
      QuelleS, WV, Datum, AnlassErg, GSP, MA,Meldung, Wort,Ergebnis:String;
      I,j, count :integer;
      test, txterror:string;
      Buffer:Pchar;
      Begin
      result:='';
      Ergebnis:='';
      ErstelleWerteliste(strpas(satz));
      try
      j:= Spaltenliste.count;
      except
      end;
      for i:=0 to Spaltenliste.count - 1 do
      Begin
      If Spaltenliste.Strings [i] = 'KNTNR' Then
      Begin
      if Werteliste.strings [i] = '' Then
      Begin
      Werteliste.strings [i] := floattostr(GenPKTC('KNT', txtError));
      if txterror <> '' Then
      Begin
      Ergebnis:= txterror;
      break;
      end;
      DetailAction:=_insert;
      end
      else
      DetailAction:=_update;
      end;

      if (DetailAction=_insert) and (Spaltenliste.Strings [i] = 'FIRNR') Then
      Begin
      Werteliste.strings [i]:=HoleFirNr(Werteliste.strings [i]);
      if werteliste.strings [i] = '' Then
      Begin
      Ergebnis := 'Adresse nicht vorhanden ...';
      break;
      end;
      end;

      If Spaltenliste.Strings [i] = 'MITARBEITERS' Then
      Werteliste.strings [i]:=AppManager.User;

      If Spaltenliste.Strings [i] = 'KONTAKTDATUM' Then
      Begin
      DATUM:= Werteliste.strings [i];
      if DATUM = '' Then
      Begin
      Ergebnis := 'Kontaktdatum nicht vorhanden ...';
      break;
      end;
      end;

      end;

      if (Ergebnis <> '') Then
      Begin
      StrPCopy(pc_Result,ergebnis);
      Result:=pc_Result;
      exit;
      end;

      if (DetailAction=_Update) Then
      Begin
      if not UpdateKontakt Then
      Begin
      Ergebnis:='Update fehlerhaft...';
      StrPCopy(pc_Result,ergebnis);
      Result:=pc_Result;
      end;
      end;

      if (DetailAction=_Insert) Then
      Begin
      if not InsertKontakt Then
      Begin
      Ergebnis:='Insert fehlerhaft...';
      StrPCopy(pc_Result,ergebnis);
      Result:=pc_Result;
      end
      else;
      // MessageDlg('Insert OK',mtInformation,[mbOk], 0);--> Stürzt ab, wenn 5-6 Mal ausgeführt
      end;
      end;

      initialization
      begin
      pc_Result:=StrAlloc(201);
      end;
      finalization
      begin
      StrDispose(pc_Result);
      end;
      end

      Comment

      Working...
      X