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]