AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit COM dll und Thread

Ein Thema von iphi · begonnen am 9. Jan 2022 · letzter Beitrag vom 10. Jan 2022
Antwort Antwort
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#1

Problem mit COM dll und Thread

  Alt 9. Jan 2022, 06:51
Hallo,
ich habe ein Messgerät, welches über eine COM dll gesteuert wird.
Da die eine Messung initiierende Funktion blockiert, bis die Messung abgeschlossen ist, soll die in einem eigenene Thread ablaufen, um die GUI nicht zu blockieren.

Jetzt habe ich folgendes Problem:
- Die Measure-Funktion im Hauptthread aufgerufen läuft genau wie sie soll:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
pico.Measure('S11'); //geht
end;
- Die Measure-Funktion im Thread aufgerufen erzeugt eine Access Violation innerhalb der COM dll:

Delphi-Quellcode:
procedure MeasureThread.DoExecute;
begin
while not terminated do
  pico.Measure('S11'); //access violation in COM dll
end;


procedure MeasureThread.Execute;
begin
inherited;
CoInitialize( nil );
try
  DoExecute;
  finally
  CoUninitialize;
  end;
end;
Hat dafür jemand eine Erklärung?
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.822 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit COM dll und Thread

  Alt 9. Jan 2022, 08:56
Hallo,

ich glaube eine COM-DLL muss für Multithreading Nutzung einen entsprechenden
Modus Deklarieren. Das müsste also der Anbieter tun.

Wenn das nicht hinzubekommen sein sollte, dann könnte man ein kleines Programm
Schreiben welches die DLL Benutzt und von deinem asynchron aufgerufen wird und
über einen Mechanismus (Named Pipe, TCP Verbindung im Local Host, Memory Mapped File...)
die Daten zurückliefert. Hätte man da einen bidirektionalen Mechanismus könnte deine
Anwendung dem Messprogrämmchen dann auch mitteilen, wann es beendet werden soll.

Die andere Frage ist aber auch: wie liefert diese COM-DLL die Daten zurück?
Gibt's da evtl. irgendwelche Callbacks die da dann bei dir aufgerufen werden und in
denen du mit deinem GUI interagierst? Das müsste dann ja auch Thread sicher passieren!

Grüße
TurboMagic
  Mit Zitat antworten Zitat
iphi

Registriert seit: 13. Feb 2009
262 Beiträge
 
Delphi 7 Personal
 
#3

AW: Problem mit COM dll und Thread

  Alt 9. Jan 2022, 16:33
Zitat:
Das müsste also der Anbieter tun.
Da gibt es leider keinerlei Support.

Danke für die Tipps!
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
672 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Problem mit COM dll und Thread

  Alt 10. Jan 2022, 14:53
Hallo,
ich habe ein Messgerät, welches über eine COM dll gesteuert wird.
Da die eine Messung initiierende Funktion blockiert, bis die Messung abgeschlossen ist, soll die in einem eigenene Thread ablaufen, um die GUI nicht zu blockieren.

Jetzt habe ich folgendes Problem:
- Die Measure-Funktion im Hauptthread aufgerufen läuft genau wie sie soll:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
pico.Measure('S11'); //geht
end;
- Die Measure-Funktion im Thread aufgerufen erzeugt eine Access Violation innerhalb der COM dll:

Delphi-Quellcode:
procedure MeasureThread.DoExecute;
begin
while not terminated do
  pico.Measure('S11'); //access violation in COM dll
end;


procedure MeasureThread.Execute;
begin
inherited;
CoInitialize( nil );
try
  DoExecute;
  finally
  CoUninitialize;
  end;
end;
Hat dafür jemand eine Erklärung?
Versuchs mal mit

CoInitializeEx(nil, COINIT_APARTMENTTHREADED);
Peter Below
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz