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);
In reply to define type or struct for BSTR data type by manojghosh
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |