manojghosh has asked for the wisdom of the Perl Monks concerning the following question:
please help in defining a BSTR data type which is return type of a c++ developed .dll's function and i have to call it using win32::API.
As BSTR is defined as combination of a 4 byte integer, a string of unicode characters (wide which is of type wchar_t) and consist of 2 null characters.
The C++ function is like this, BSTR _stdcall RandomDec(unsigned long isize,long * iReturn)in perl i am using like this,
#!/usr/bin/perl use strict; use Win32::API; use Encode qw( decode ); sub bstr_to_str { my $bstr = $_[0]; my $len = unpack('V', unpack('P4', pack('J', $bstr))); my $raw = unpack("P$len", pack('J', $bstr+4)); return decode('UTF-16le', $raw); } Win32::API::Struct->typedef('BSTR','INT','x','WCHAR','y','CHAR','z1',' +CHAR','z2'); my $iSize=8 ; my $iReturn=\0; my $iReturn_buf = pack('l', $iReturn); Win32::API->Import('My.dll','BSTR RandomDec(LONG ,LONG *)')or die $^E; + my $rv_bstr=RandomDec($iSize,$iReturn); my $rv = bstr_to_str($rv_bstr); ## how to unpack and manage BSTR? print($rv);
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: define type or struct for BSTR data type
by ikegami (Patriarch) on Mar 29, 2011 at 08:31 UTC | |
by manojghosh (Novice) on Mar 29, 2011 at 08:58 UTC | |
by manojghosh (Novice) on Mar 29, 2011 at 10:57 UTC | |
by ikegami (Patriarch) on Mar 29, 2011 at 15:30 UTC | |
by ikegami (Patriarch) on Mar 29, 2011 at 15:39 UTC | |
by nmeijer (Initiate) on Dec 31, 2012 at 16:56 UTC | |
by Corion (Patriarch) on Dec 31, 2012 at 17:06 UTC | |
|
Re: define type or struct for BSTR data type
by vkon (Curate) on Mar 29, 2011 at 08:28 UTC |