note
Nitrox
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:
<p>
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)
<code>
1 sub RegCallback {
2 $CB = shift;
3 $HS = $CB->GetInterface();
4 return;
5 }
</code>
After calling this routine $CB contains <code>Win32::OLE=HASH(0x2f1603c)</code> but when trying to call Dumper() on $CB it errors with:
<p>
Win32::OLE(0.1601) error 0x80004001: "Not implemented"
<p>
$HS contains <code>Win32::OLE=HASH(0x298ccdc)</code> and Dumper() produces:
<code>
$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' );
</code>
Adding <code>share($CB)</code> after line 2 allows the Dumper() call to return: <code>$VAR1 = \bless( {}, 'Win32::OLE' );</code>
but then line 3 errors with:
<code>Win32::OLE(0.1601): GetOleObject() Not a Win32::OLE object at /PerlApp/Win32/OLE/Lite.pm line 154.</code>
<p>
-Nitrox
219141
219141