Einzelnen Beitrag anzeigen

Benutzerbild von Armageddon
Armageddon

Registriert seit: 30. Mär 2003
Ort: Wilflingen
158 Beiträge
 
#6

Re: Mehrere Ergebnisse aus Dll an Programm übergeben, aber w

  Alt 29. Dez 2004, 22:01
So hier noch der Code der Dll, im Hauptprogramm hätte ich gern die Werte von Start und Laenge bzw. noch mehr man kann ja nie genug kriegen:

Delphi-Quellcode:
library mtrcnc32;

{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss sich in der
  ersten Unit der unit-Klausel der Bibliothek und des Projekts befinden (Projekt-
  Quelltext anzeigen), falls die DLL Prozeduren oder Funktionen exportiert, die
  Strings als Parameter oder Funktionsergebnisse übergeben. Das gilt für alle
  Strings, die von oder an die DLL übergeben werden -- sogar für diejenigen, die
  sich in Records und Klassen befinden. Sharemem ist die Schnittstellen-Unit zur
  Verwaltungs-DLL für gemeinsame Speicherzugriffe, BORLNDMM.DLL.
  Um die Verwendung von BORLNDMM.DLL zu vermeiden, können Sie String-
  Informationen als PChar- oder ShortString-Parameter übergeben. }

 
uses
  SysUtils, Classes, Windows;

{$R *.res}

function GetTempFolder: AnsiString;
var
  Buf: array[0..MAX_PATH] of AnsiChar;
begin
  GetTempPath(SizeOf(Buf), @Buf);
  Result := Buf;
  if Result <> 'then if AnsiLastChar(Result)^ <> '\then Result := Result + '\';
end;

function Speichern(GCode: PChar):Boolean; stdcall;
var
  Datei: Integer;
  Buffer: PChar;
  F, Fehler, Text: String;
begin
  Result := True;
  Text := GCode;
  F := GetTempFolder + 'paddydat';
  Datei := FileCreate(F, fmCreate);
  if Datei > 0 then
  begin
    Buffer := PChar(Text);
    FileSeek(Datei, 0, 0);
    FileWrite(Datei, Buffer^, Length(Text));
    FileClose(Datei);
  end else
  begin
    Fehler := 'Eine andere Anwendung hält die Datei "paddydat" geöffnet!' + #13;
    Fehler := Fehler + 'Aus diesem Grund wird beim Beenden dieses Tools' + #13;
    Fehler := Fehler + 'nicht der angezeigte Text aus diesem Tool eingefügt' + #13;
    Fehler := Fehler + 'Schliessen Sie die Anwendung welche die "paddydat"' + #13;
    Fehler := Fehler + 'geöffnet hält und somit den Schreibzugriff sperrt und' + #13;
    Fehler := Fehler + 'versuchen Sie es erneut.';
    MessageBox(0, PChar(Fehler), 'Problem', MB_OK);
    Result := False;
  end;
end;

procedure Pruefen(Zahl: PChar; var Start, Laenge: Integer); stdcall;
var
  Puffer1, Puffer2: String;
  KommaPos, MinusPos: Integer;
begin
  Puffer1 := Zahl;
  KommaPos := Pos('.', Puffer1);
  MinusPos := Pos('-', Puffer1);
  if MinusPos > 0 then Puffer2 := Copy(Puffer1, MinusPos + 1, KommaPos - 2) else
    Puffer2 := Copy(Puffer1, MinusPos, KommaPos - 1);
  if Length(Puffer2) > 3 then
  begin
    Start := MinusPos;
    if MinusPos > 0 then Laenge := KommaPos - 2 else Laenge := KommaPos - 1;
  end;
  Puffer2 := Copy(Puffer1, KommaPos + 1, Length(Puffer1) - KommaPos + 1);
  if Length(Puffer2) > 3 then
  begin
    Start := KommaPos;
    Laenge := Length(Puffer1) - KommaPos;
  end;
end;

exports
  Speichern, Pruefen;

begin
end.
  Mit Zitat antworten Zitat