http://qs1969.pair.com?node_id=219178


in reply to Threads and object access

I'd love to post some example code for folks to test but this is part of a ActiveX Control module that I'm creating with PerlCtrl from the Perl Development kit. To make a long story short there is quite a bit of code needed just to get to this point. Add to that the need for the created DLL to be called by a 3rd party VB application. I'll try and create a high-level walkthru:

After the VB application calls CreateObject() on my DLL it calls a subroutine in my code to establish the COM/callback objects. (shortened version below to give a general idea)

1 sub RegCallback { 2 $CB = shift; 3 $HS = $CB->GetInterface(); 4 return; 5 }
After calling this routine $CB contains Win32::OLE=HASH(0x2f1603c) but when trying to call Dumper() on $CB it errors with:

Win32::OLE(0.1601) error 0x80004001: "Not implemented"

$HS contains Win32::OLE=HASH(0x298ccdc) and Dumper() produces:

$VAR1 = \bless( { 'plugin' => undef, 'ThreadID' => 1000, 'NoLog' => 0, 'hwnd' => 3932376, 'DebugMode' => 0, 'EventCount' => 2, 'DeviceCount' => 2, 'LastCommandSelected' => undef, 'SunRise' => '7:02 AM', 'SunSet' => '4:13 PM' }, 'Win32::OLE' );
Adding share($CB) after line 2 allows the Dumper() call to return: $VAR1 = \bless( {}, 'Win32::OLE' ); but then line 3 errors with: Win32::OLE(0.1601): GetOleObject() Not a Win32::OLE object at /PerlApp/Win32/OLE/Lite.pm line 154.

-Nitrox