Du benutzt "String", welcher IMO ziemlicher Blödsinn ist, wenn man DLLs benutzt. Denn Strings sind Delphi-features und dann auch noch verwaltet vom MemoryManager.
Was schnell zu Fiesimatenten führt.
Entweder du nimmst PWideChar, oder WideString, oder du bleibst beim alten
ANSI-Krams und nimmst PChar.
Ungeachtet dessen...
Falls du auch nur irgendwo in der
DLL die globale Variable deines Forms hernimmst, die Delphi hirnamputierterweise jedesmal anlegt, solltest du dich nicht wundern wenn es irgendwo irgendwann knallt.
Nochmal: Hast du auch nur irgendwo code, der "Form1." enthält, dann ist das schlicht und ergreifend falsch.
So sollte es einfach gehen, solange du in dem Form nix machst was du zufrüh freigibst:
Delphi-Quellcode:
function ShowFormAdministration(const sUser, sEnvironment : WideString) : Integer; stdcall; export;
...
implementation
...
function ShowFormAdministration(const sUser, sEnvironment : WideString) : Integer;
var
yourForm : TYourForm;
begin
yourForm := TYourForm.Create(nil);
try
yourForm.UserName := sUser;
yourForm.Environment := sEnvironment;
result := yourForm.ShowModal();
finally
yourForm.Free();
end;
end;
Edit:
Auwaia, du zeigst das Form nicht modal, aber ohne etwas an die Echse zu übergeben, mit der es Geschlossen und/oder Freigegeben werden kann?
Marcos Vorschlag mit der CloseAction trifft es schon auf den Kopf.