1.
Wenn Strings zwischen
DLL und Anwendung übergeben werden, muss in beiden ShareMem eingetragen und die "ShareMem.dll" mitgeliefert werden.
Alternativ kann man WideString für Parameter und Rückgabewerte verwenden (auch in Records) z.B.
function MyFunctionDDL(AParam: WideString): WideString; stdcall;
Die Speicherwaltung für diese Strings erfolgt automatich durch OleAuth32, die zu Windows gehört.
2.
Wenn in der
DLL TForm verwendet wird, enthält die
DLL eine komplett eigenständige Kopie der
VCL.
Die
VCL verwendet ebenfalls globale Variablen, insbesondere "Application".
"Application.Handle" muss vor der Verwendung der
VCL in der
DLL einmalig gesetzt werden.
Delphi-Quellcode:
{in der DLL, Handle der Anwendung übernehmen}
procedure InitVCL(AHandle: THandle);
stdcall;
begin
Application.Handle := AHandle;
end;
{in der Anwendung, Handle der Anwendung übergeben}
...
InitVCL(Application.Handle);
3.
Der Bugreport zeigt, ShowModal wird rekursiv noch einmal aus LoadIni über ProcessMessages aufgerufen.
Das ist an sich schon nicht zulässig.
Es scheint aber auch das "iniFile" keine lokale Variable der Methode LoadIni ist, wie es eigentlich sein sollte.