Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi 7 DLL in C# verwenden, Out of Memory Exception (https://www.delphipraxis.net/187788-delphi-7-dll-c-verwenden-out-memory-exception.html)

iceget 4. Jan 2016 02:29

Delphi 7 DLL in C# verwenden, Out of Memory Exception
 
Hallo liebe Community,

ich habe folgendes Problem:
Ich nutze für das verschlüsseln und entschlüsseln von Strings die Funktionen von einer Delphi Anwendung.

Hier der Delphi Code:
Code:
function Crypt(Input: string; Phrase: string): string;
var
  Cipher: TDCP_blowfish;
  str: string;
begin
  str := '';
  Cipher := TDCP_blowfish.Create(nil);
  Cipher.InitStr(Phrase);
  Cipher.Reset;
  Cipher.Burn;
  Result := Input;
end;
Wenn ich Delphi Funktion via C# aufrufe:
Func("test", out pOut, 1), bekomme ich eine Out Of Memory Exception zurück..

Nun sind wir schon bei meiner Frage:
Wie kann ich auch ein FreeMem ausführen bei der TCDP_Blowfish ver / Entschlüsselung?
Bzw. wenn ich die Funktion Crypt ausführe, füllt sich der Speicher wieder.

Was kann ich dagegen tun? Was muss ich in Delphi anders schreiben?

Ziel sollte es sein das mir die Anwendung nicht immer meinen RAM füllt, und sich dann via System.OutOfMemoryException beendet...

Habe erst heute den gesamten Delphi Quelltext wie auf http://stackoverflow.com/questions/5...ype-in-c-sharp neu geschrieben. Zumindest funktioniert nun die Mode 3 (mit dem String allein)...

Leider bin ich ein blutiger Anfänger.

Ich bedanke mich schon einmal vorweg.
Vielen Dank

hoika 4. Jan 2016 05:29

AW: Delphi 7 DLL in C# verwenden, Out of Memory Exception
 
Hallo,
Cipher.Free fehlt.


Heiko

jaenicke 4. Jan 2016 05:58

AW: Delphi 7 DLL in C# verwenden, Out of Memory Exception
 
Du solltest die Speicherverwaltung so umsetzen wie es üblich ist, auch in der Windows API:
Du übergibst einen Pointer auf bereits reservierten Speicher an die DLL plus die reservierte Größe, diese füllt ihn und du gibst den Speicher im Hostprogramm auch wieder frei. Wenn ein zu kleiner Puffer übergeben wurde, muss die Funktion einen entsprechenden Fehler und die benötigte Puffergröße zurückliefern.

Ein Beispiel ist zum Beispiel die Funktion GetPrinter:
https://msdn.microsoft.com/en-us/lib...or=-2147217396

iceget 4. Jan 2016 16:50

AW: Delphi 7 DLL in C# verwenden, Out of Memory Exception
 
Hallo Leute,

danke für eure antworten!

@Heiko: danke, mit dem Befehl Chiper.Free; wurde mein Problem behoben!

Danke und lg iceget

haentschman 4. Jan 2016 16:57

AW: Delphi 7 DLL in C# verwenden, Out of Memory Exception
 
Moin...:P
Zitat:

...mit dem Befehl Chiper.Free;...
...aber bitte nicht nur dahinterklatschen sondern mit Ressourcenschutzblock. :zwinker:

iceget 4. Jan 2016 18:14

AW: Delphi 7 DLL in C# verwenden, Out of Memory Exception
 
Hi,

Was meinst du damit?

Try, Catch, Finally?

Danke und LG.

Wie gesagt, bin leider Delphi Anfänger

Zacherl 4. Jan 2016 19:07

AW: Delphi 7 DLL in C# verwenden, Out of Memory Exception
 
Ja try..finally. Normalerweise schützt man in Delphi jede Resource in der Form:
Delphi-Quellcode:
var
  X: TObject;
begin
  X := TObject.Create;
  try
    X.Work();
  finally
    X.Free;
  end;
end;

iceget 4. Jan 2016 19:13

AW: Delphi 7 DLL in C# verwenden, Out of Memory Exception
 
Alles klar, werde ich noch einbauen!

Danke und lg

haentschman 5. Jan 2016 07:03

AW: Delphi 7 DLL in C# verwenden, Out of Memory Exception
 
Moin...:P
Zitat:

Alles klar, werde ich noch einbauen!
...genau das war der Grund warum ich dir den Denkanstoßbrocken hingeworfen hatte. :thumb: Jetzt solltest du aber auch mal nachlesen wie der finally Block arbeitet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz