DLL in VB abarbeiten (asynchron ?)

Hola,

ich habe folgendes Problem:
Innerhalb eines VB-Programms wird eine DLL aufgerufen. Der Aufruf dieser DLL kann u.U. sehr lange dauern. In dieser Zeit wird das VB-Projekt komplett blockiert. Selbst Timer gehen erst dann wieder weiter wenn der DLL-Aufruf beendet ist.

Gibt es eine Möglichkeit die DLL „asynchron“ aufzurufen so das bspw. Timer noch normal weiterlaufen. Wenn ja, wie erfahre ich dann wenn der DLL-Aufruf beendet ist ?

Vielen Dank für Eure Hilfe !!

Gruß

Tom

Hallo Tom
Ob die dll fertig ist , erfährt man allgemein mit der Übergabe der Rückgabewerte .
Einen Fortschrittsanzeiger müßtest Du in den meisten Fällen schon selbst programmieren ( eigene dll ) . Im allgemein würde ich sagen , die dll hängt .
Dll’s können auch ganz verschiedenartig kompliziert sein , zum Beispiel mit Angabe von Callbackroutinen .
Möchtest Du eine bestimmte Rechnerkapazität für eine dll bestimmen , wird es etwas schwieriger , auch die Gesamtgeschwindigkeit des Rechners spielt eine Rolle .
Da würde ich dann durch die ganzen Api-Calls schauen mit den Stichworten Createprocess , thread , multitasking , und da gibts sicher noch mehr .
Dir ist bestimmt bekannt , das man sowohl in VB Prozesse „synchron“ als auch „asynchron“ aufrufen kann , also entweder „abwartend bis Rückkehr“ oder gleichzeitig mitlaufend .
Dann spielt es auch noch eine Rolle , welche Priorität die dll im System hat . Man kann die Priorität unter Umständen von hoch auf einen niedrigeren Wert setzen . Allerdings macht es keinen Sinn , eine fertige dll „umzubasteln“ , ich würde eher sagen , irgendwas läuft falsch .
Du kannst auch mal die dll genauer untersuchen : Wann tritt der hohe Zeitverbrauch auf ? Funktioniert die dll überhaupt ?
Mehr kann ich so nicht dazu sagen .
MfG

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Thomas,

wie in der Voranwort schon geschrieben muss du wenn du
eine echte Asynchronität erreichen willst entweder die API
bemühen oder du muss eine EXE schreiben die im Hintergrund
läuft und über eine Art Nachrichtensystem gesteuert wird.

In die Nähe einer Asynchronität kommst du wenn du in
schleifen oder ähnlichem DoEvents einbaust.
Auch muss du die DLL mit einem Starttimer versehen.
Wenn du die DLL mit Ereignissen ausstattest wüedest
du auch Statusinformationen bekommen.
im Hauptprogramm musst du auch alle Schleifen mit doevents versehen
Aber sobald du externe Routinen aus andern DLL benutzt die nicht
Asyncron sind hängt deine DLL.

Mit freundlichen Grüßen
Christian Bothe