Einzelnen Beitrag anzeigen

Benutzerbild von Die Muhkuh
Die Muhkuh

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

Re: DLL: Record aus DLL holen

  Alt 24. Apr 2006, 19:44
Hier ist die komplette TLanguageDLLCommunicator-Klasse

Delphi-Quellcode:
{ TLanguageDLLCommunicator }

destructor TLanguageDLLCommunicator.Destroy;
begin
  FreeLibrary(FHandle);
  FOpened := false;
  
  inherited;
end;

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;

function TLanguageDLLCommunicator.GetLanguage: TLanguageRec;
var
  func: TGetLanguageRecord;
begin
  if FOpened then
  begin
    @func := GetProcAddress(FHandle, 'GetLanguageRecord');

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

procedure TLanguageDLLCommunicator.SetFileName(const Value: String);
begin
  try
    FreeLibrary(FHandle);
    FOpened := false;
  except
    { Do nothing }
  end;

  FFileName := Value;

  try
    FHandle := LoadLibrary(PChar(Value));

    if FHandle = 0 then
    begin
      raise Exception.Create('Can not load languagedll'#13#10+Value);
    end;

    FOpened := true;
  except
    raise Exception.Create('Can not load languagedll'#13#10+Value);
  end;
end;
Müsste ich GetMem für jeden einzelnen PChar aufrufen?
Wo müsste ich das dann aufrufen? In der DLL oder in meinem Programm?

[edit] Hast richtig geraten. Wenn ich nur eine DLL verwende, funktioniert das ganze Problemlos.

Könnte man nicht die Records für DLL -> Programm mit PChar machen, im Programm dann aber als String speichern?

Quasi zweimal den gleichen Records, nur verwendet das Programm Stringrecordun die DLL PChar-Records.
OK, geht nich... [/edit]
  Mit Zitat antworten Zitat