Das ist etwas schwierig auf einen Nenner zu bringen.
Ich habe ganze Eingabemasken inklusive Datenbankzugriff, die problemlos funktionieren. Dann gibt es wieder welche, die das Problem verursachen.
Bei einer Maske musste ich z.B. TFileSaveDialog durch TSaveDialog ersetzen, damit sie funktioniert. Die selbe
DLL mit TFileSaveDialog mit Delphi XE5 kompiliert macht kein Problem.
In der
DLL kann das z.B. so aussehen:
Code:
procedure edit_test; stdcall;
begin
.....
end;
im rufenden Programm kommt dann z.B. folgendes:
Code:
var
edit_test : procedure; stdcall;
testdll : HMODULE;
procedure TForm1.Button1Click(Sender: TObject); //
DLL laden
begin
testdll := LoadLibrary('testdll.dll');
if testdll <> 0 then
begin
@edit_test := GetProcAddress(testdll, 'edit_test');
end;
end;
procedure TForm1.Button2Click(Sender: TObject); // Routine aufrufen
begin
edit_test;
end;
procedure TForm1.Button3Click(Sender: TObject); //
DLL freigeben
begin
FreeLibrary(LHnd);
edit_test := nil;
end;
Ich habe das zum Testen bewusst auf 3 Schalter gelegt. Beim Drücken von Button1 wird das Programm jedoch schon kommentarlos beendet.
Ich werde versuchen ein komplettes Programm samt kompletter
DLL zu erstellen, welches möglichst einfach gehalten ist, aber das Problem bringt. Ich hoffe das gelingt.
Ich weiß, so wird es schwierig. Warum kompiliert XE5 die
DLL so, dass sie funktioniert und XE7 macht Mist? Das ist mal die Hauptfrage, die mich beschäftigt.