Registriert seit: 30. Mär 2003
Ort: Wilflingen
158 Beiträge
|
Re: String aus Anwendung in Dll übergeben und zurück
30. Jan 2005, 19:11
Hi nochmal,
SirThornberry Dein Beispiel hab ich jetzt mal ausprobiert. Funktioniert auch bis zu StrDispose dann kackt es ab und bringt eine Fehlermeldung wegen Ungültiger Zeigeroperation.
Bis jetzt sieht es so aus:
Im Programm:
Delphi-Quellcode:
procedure TForm1.EditKommaExit(Sender: TObject);
var
Test: String;
begin
LabelLoeschen(self);
KommaAusgang(self, (Sender as TEdit).Text, Test);
// StellenPruefen(self, Sender as TEdit);
end;
Delphi-Quellcode:
procedure KommaAusgang(Woher: TForm; Eingabe: String; var Ausgabe:String);
var
EditKommaAusgang: procedure(Zeichen:PChar; var Ergebnis: PChar); stdcall;
LibMod: HMODULE;
Rueckgabe: PChar;
begin
if not FileExists('mtrcnc32.dll') then
begin
Fehler(Woher, 'Die Datei "mtrcnc32.dll" wurde nicht gefunden!');
end;
LibMod := LoadLibrary(PChar(ExtractFilePath(ParamStr(0))+'mtrcnc32.dll'));
if LibMod <> 0 then
begin
EditKommaAusgang := GetProcAddress(LibMod, 'EditKommaAusgang');
if Assigned(EditKommaAusgang) then
begin
EditKommaAusgang(PChar(Eingabe), Rueckgabe);
Ausgabe := Rueckgabe;
ShowMessage(Ausgabe);
StrDispose(Rueckgabe); //<-- Hier kackts ab!
end;
FreeLibrary(LibMod);
end;
end;
Und in der DLL:
Delphi-Quellcode:
procedure EditKommaAusgang(Zeichen:PChar; var Ergebnis: PChar); stdcall;
var
T, VKT, HKT, B: String;
MP, KP: Integer;
VKTL, HKTL: Boolean;
begin
VKTL := False;
HKTL := False;
T := Zeichen;
if T = '.' then T := '0.0';
if T = '-' then T := '0.0';
if T = '-.' then T := '0.0';
if Pos('.', T) = 0 then T := T + '.';
MP := Pos('-', T);
KP := Pos('.', T);
if KP > 0 then
begin
VKT := Copy(T, 1, KP - 1);
if MP > 0 then VKT := Copy(VKT, 2, Length(VKT) - 1);
HKT := Copy(T, KP + 1, Length(T) - KP);
//Vorkommatext Nullen kürzen
B := Copy(VKT, 1, 1);
while B = '0' do
begin
VKT := Copy(VKT, 2, Length(VKT) - 1);
B := Copy(VKT, 1, 1);
if Length(VKT) = 0 then VKTL := True;
end;
//Hinterkommatext Nullen kürzen
B := Copy(HKT, Length(HKT), 1);
while B = '0' do
begin
HKT := Copy(HKT, 1, Length(HKT) - 1);
B := Copy(HKT, Length(HKT), 1);
if Length(HKT) = 0 then HKTL := True;
end;
T := '';
if MP > 0 then T := '-';
T := T + VKT + '.' + HKT;
end;
if T = '.' then if (VKTL = True) or (HKTL = True) then T := '0.0' else T := '';
if T = '-.' then if (VKTL = True) or (HKTL = True) then T := '0.0' else T := '';
Ergebnis := StrAlloc(length(T) + 1);
Move(T[1], Ergebnis^, length(T));
Ergebnis[length(T)] := #0;
end;
Was muß man hier noch verbessern? Bzw. was hab ich falsch gemacht? Please help me.
|
|
Zitat
|