Wäre es da nicht evtl. einfacher die
DLL so zu strukturieren, dass der gleichzeitige Zugriff aus einer Anwendung funktioniert? Also keine globalen Variablen innerhalb der
DLL verwenden und damit ist meistens schon ein Großteil getan.
Typischerweise kann man so etwas dann so lösen, dass die Objekte als Parameter übergeben werden. Entweder per ID oder sogar direkt den Pointer. Ich kenne jetzt die Schnittstelle nicht weswegen ich da kein wirklich sinnvolles Beispiel nennen kann. Aber ich denke an nachfolgendem Pseudo-Code dürfte das Prinzip klar werden.
Code:
net_connect(
ip, port): pointer;
net_close(net: pointer);
net_read(net: pointer; ...);
net_write(net: pointer; ...);
// Das Innere der Methoden könnte dann so aussehen.
net_connect(
ip, port): pointer;
begin
Result := TNetConnection.Create(
ip, port);
end;
net_close(net: pointer);
begin
TNetConnection(net).Close;
TNetConnection(net).Free;
end;
net_read(net: pointer; ...);
begin
TNetConnection(net).Read;
end;
Vorteil davon wäre, falls sich was an den Klassen verändert bleiben sie kompatibel, da ja alles innerhalb der
DLL abgewickelt wird. Evtl kann man dem Kompfort zu liebe dann auch noch eine Wrapperklasse erstellen. Das ist sicher etwas mehr Aufwand aber ich denke das wäre die solideste Lösung.