AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL: Record aus DLL holen

Ein Thema von Die Muhkuh · begonnen am 24. Apr 2006 · letzter Beitrag vom 24. Apr 2006
 
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#1

DLL: Record aus DLL holen

  Alt 24. Apr 2006, 17:02
Moin moin,

ich hab das ein kleines Problemchen mit meiner DLL.

[ Das Codegerümpel is unten ]

Also, los geht's. Ich hab in einer DLL eine Sprache drin. Diese Sprache ist über einen Record aufgebaut. Das Auslesen klappt, wie es soll (per Debugger überprüft). Dann füge ich das ja in meine ObjectList hinzu ([1]) (TLanguageManager = class(TobjectList). Wenn ich nun auf diese Language zugreife ([2]), steht danach im Record nur Mist drinne.

Bis zu Zeitpunkt von [1] stimmt alles noch. Aber bei [2] ist dann Chaos in dem Record.

[edit]
Ich kann auch noch in der Procedure SearchLanguages das hier schreiben:

 raise Exception.Create(Items['German'].LanguageInfo.lngDate); Da funktionierts einwandfrei...

[/edit]

Erstmal Aufbau der Records:

Delphi-Quellcode:
type
  TLanguageObj = record
    Caption: PChar;
    Hint: PChar;
  end;

  TLanguageInfoRec = record
    lngAuthor: PChar;
    lngLanguageVersion: PChar;
    lngProgramVersion: PChar;
    lngDate: PChar;
    lngLanguageName: PChar;
  end;

  TLangfrmMainRec = record
    lngmiFile: TLanguageObj;
    lngactClose: TLanguageObj;
  end;

  TLanguageRec = record
    lngfrmMain: TLangfrmMainRec;
  end;
So, dann DLL:

Delphi-Quellcode:
function GetLanguageRecord: TLanguageRec; stdcall;
begin
  Result.lngfrmMain.lngmiFile.Caption := 'Datei - DLL';
  Result.lngfrmMain.lngmiFile.Hint := 'Datei - DLL';

  Result.lngfrmMain.lngactClose.Caption := 'Programm beenden - DLL';
  Result.lngfrmMain.lngactClose.Hint := 'Beendet das Programm';
end;

function GetLanguageInfo: TLanguageInfoRec; stdcall;
begin
  Result.lngAuthor := 'Manuel Rauber';
  Result.lngLanguageVersion := '1.0';
  Result.lngProgramVersion := '0.1';
  Result.lngDate := '2006-04-24';
  Result.lngLanguageName := 'German';
end;

exports
  GetLanguageRecord,
  GetLanguageInfo;
Dann Auslesecode ( ):

Delphi-Quellcode:
procedure TLanguageManager.SearchLanguages;
var
  SR: TSearchRec;
  Lang: TLanguage;
begin
  inherited Clear;

  if FindFirst(GetLangDir + '*.dll', faAnyFile, SR) = 0 then
  begin
    repeat
      FDLLCommunicator.Filename := GetLangDir + SR.Name;
      Lang := TLanguage.Create(Self);
      Lang.LanguageInfo := FDLLCommunicator.GetLanguageInfo;
      Lang.LanguageRec := FDLLCommunicator.GetLanguage;
      inherited Add(Lang); //////////////////// [1]
    until FindNext(SR) <> 0;
  end;
end;
Passend dazu noch GetLanguageInfo:

Delphi-Quellcode:
function TLanguageDLLCommunicator.GetLanguageInfo: TLanguageInfoRec;
var
  func: TGetLanguageInfo;
begin
  if FOpened then
  begin
    @func := GetProcAddress(FHandle, 'GetLanguageInfo');

    if @func <> nil then
    begin
      Result := func;
    end;
  end
  else
    raise Exception.Create('DLL is not open');
end;
Und zu guter Letzt noch GetItem:

Delphi-Quellcode:
function TLanguageManager.GetItem(LangName: String): TLanguage;
var
  I: Integer;
begin
  for I := 0 to inherited Count - 1 do
  begin
    //////////////////// [2]
    if (TLanguage(inherited Items[I]).LanguageInfo.lngLanguageName = LangName) then
    begin
      Result := TLanguage(inherited Items[I]);
      Break;
    end;
  end;
end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz