ActiveX DLL apelat din firul Python

Am un DLL ActiveX (COM) care face apeluri de sistem Windows (cum ar fi ReadFile() și WriteFile ()). Funcționează bine din firul principal Python GUI. Dar mi se blochează GUI-ul Python atunci când este chemat dintr-un fir. Fac unele cercetări online și mă gândesc că trebuie să fac ceva cu GIL. Sunt pe drumul cel bun? Sau vă rog să mă îndreptați spre direcția cea bună. Mulțumesc!

1

2 răspunsuri

Așa cum am menționat Vladimir, s-ar putea să fiu faptul că componenta dvs. COM nu este sigură pe mai multe fire, puteți testa tipul de "apartament" în care este înregistrat DLL-ul dvs. articol oferă o imagine de ansamblu bună despre această problemă.

0
adăugat
Ar trebui să existe "Free" ca ThreadingModel, încercați doar "Apartament". Am primit această problemă odată și acest sfat mi-a salvat viața .. :-)
adăugat autor mox, sursa

Este greu să spui ceva fără să vezi codul, dar sunt șanse ca:

  1. ActiveX pur și simplu nu suportă multithreading (multe dintre ele nu) și încercați să lucrați cu obiectul din diferite fire.
  2. DLL-ul care conține ActiveX efectuează o anumită inițializare per-thread, dar când îl apelați dintr-un alt fir, aceasta nu este inițializată.

Oricum, nu pot spune nimic despre GIL, dar am avut de-a face cu ActiveX în trecutul meu, cred că cel mai probabil sursa problemei este ActiveX.

0
adăugat
DLL este apartament cu filet (STA). Funcționează când este apelat de C# GUI. msdn.microsoft.com/en-us/ bibliotecă/aa261361% 28V = vs.60% 29.aspx
adăugat autor tosa, sursa
Dacă creez o nouă instanță a DLL-ului în fir, funcționează în Python. De asemenea, pentru a nu bloca firul principal în C#, trebuie creat un nou exemplu în fir. Există vreo modalitate de a evita crearea unei noi instanțe a DLL-ului?
adăugat autor tosa, sursa
Python România
Python România
100 participanți

Comunitatea pasionaților de Python din România.