type
//Definition einer speziellen Karte
TSpezielle =
record
Name: PChar;
Index: Word;
end;
TSpezielleArray =
array of TSpezielle;
//Definition der Struktur einer KartenSammlung-Information
TKartenSammlungInfo =
record
Name: PChar;
//Name der Kartensammlung
Version: PChar;
//Version der Kartensammlung
Karten: Byte;
//Anzahl der Karten (ohne spezielle)
Spezielle: TSpezielleArray;
//vorhandene spezielle Karten mit Name und
//Index
end;
PTKartenSammlungInfo = ^TKartenSammlungInfo;
//Definition der Funktion, die von einer Kartensammlung erwartet wird
TDLLSammlungInfo =
function(): TKartenSammlungInfo;
stdcall;
procedure KopiereInfo(QuelleInfo: PTKartenSammlungInfo;
var ZielInfo: TKartenSammlungInfo);
var
b: Byte;
begin
with ZielInfo
do
begin
Name := QuelleInfo.
Name;
Version := QuelleInfo.Version;
Karten := QuelleInfo.Karten;
SetLength(Spezielle, Length(QuelleInfo.Spezielle));
//FEHLER
for b := 1
to Length(QuelleInfo.Spezielle)
do //FEHLER
Spezielle[b - 1] := QuelleInfo.Spezielle[b - 1];
//FEHLER
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);
//Anzeigen der Informationen (mit zwei speziellen Karten)
MessageBox(0, PChar('
Name: ' + Info.
Name + #10 +
'
Version: ' + Info.Version + #10 +
'
Kartenzahl: ' + IntToStr(Info.Karten) + #10 +
'
Spezielle: ' + IntToStr(Length(Info.Spezielle)) + #10 +
'
Sp1: ' + Info.Spezielle[0].
Name + '
/ ' +
IntToStr(Info.Spezielle[0].
Index) + #10 +
'
Sp2: ' + Info.Spezielle[1].
Name + '
/ ' +
IntToStr(Info.Spezielle[1].
Index)
), '
', 0);}
end;
end;
FreeLibrary(KartenLib);
end;