in reply to Perl crashs always during global destruction when using WIN32 OLE object in multithread

It is highly unlikely that using threads and Win32::OLE together will work.

If at all, you should only require Win32::OLE from within a single thread of your program and carefully set it up there using ->Initialize (and the appropriate COINIT_ value). You should also only use objects retrieved within that thread in only that thread.

  • Comment on Re: Perl crashs always during global destruction when using WIN32 OLE object in multithread
  • Select or Download Code

Replies are listed 'Best First'.
Re^2: Perl crashs always during global destruction when using WIN32 OLE object in multithread
by nikosv (Deacon) on Mar 03, 2011 at 12:28 UTC

    COM+ dlls use the registry to indicate what threading model STA,MTA,Free etc they use, and if they are in-proc (dll) or out-of proc (exe).

    So better check the thread model first to see if it even can be accessed by multiple threads and if so then set your OLE initialization with the appropriate COINT_ value

    Normally even if the dll is not multi-thread aware it should pose no problem since it would serialize the calls through the STA, but there is so much going on behind the scene, especially COM+ objects being prone to re-entrancy issues,that make Corion's advise (use OLE from one thread) the one to follow