type
TSpezielle =
record
Name: PChar;
ResID: Word;
end;
TSpezielleArray =
array of TSpezielle;
TKartenSammlungInfo =
record
Name: PChar;
Version: PChar;
AnzKarten: Byte;
AnzSpezielle: Word;
Spezielle: TSpezielleArray;
end;
PTKartenSammlungInfo = ^TKartenSammlungInfo;
TDLLSammlungInfo =
function(): PTKartenSammlungInfo;
stdcall;
procedure KopiereInfo(QuelleInfo: PTKartenSammlungInfo;
var ZielInfo: TKartenSammlungInfo);
var
w: Word;
begin
with ZielInfo
do
begin
Name := QuelleInfo^.
Name;
Version := QuelleInfo^.Version;
AnzKarten := QuelleInfo^.AnzKarten;
AnzSpezielle := QuelleInfo^.AnzSpezielle;
SetLength(Spezielle, AnzSpezielle);
if AnzSpezielle > 0
then
for w := 1
to AnzSpezielle
do
Spezielle[w - 1] := QuelleInfo^.Spezielle[w];
end;
end;
function CheckSammlung(Sammlung:
string): Boolean;
var
KartenLib: THandle;
//Handle auf die DLL
DLLSammlungInfo: TDLLSammlungInfo;
//Addresse der Funktion
Info: TKartenSammlungInfo;
//Infos von der DLL
begin
result := false;
Sammlung := ExtractFilePath(ParamStr(0)) + PluginPfad + Sammlung;
KartenLib := LoadLibrary(PChar(Sammlung));
if KartenLib <> 0
then
begin
@DLLSammlungInfo := GetProcAddress(KartenLib, '
DLLSammlungInfo');
if Assigned(DLLSammlungInfo)
then
begin
KopiereInfo(DLLSammlungInfo, Info);
DLLSammlungInfo :=
nil;
MessageBox(0, PChar('
Name: ' + Info.
Name + #10 +
'
Version: ' + Info.Version + #10 +
'
Konvention: ' + Info.Konvention + #10 +
'
Kartenzahl: ' + IntToStr(Info.AnzKarten) + #10 +
'
Spezielle: ' + IntToStr(Info.AnzSpezielle) + #10 +
'
Sp1: ' + Info.Spezielle[0].
Name + '
/ '
+ IntToStr(Info.Spezielle[0].ResID) + #10 +
'
Sp2: ' + Info.Spezielle[1].
Name + '
/ '
+ IntToStr(Info.Spezielle[1].ResID)
), '
', 0);
result := true;
end;
end;
FreeLibrary(KartenLib);
end;