Can anyone give an example of how a string can be returned from a call using Win32::API() function? I need to return a string and print using $val. Please give an example if the same can be handled using pointer as return type.
use Win32::API;
my $res = new Win32::API('abc.dll','MyFun','_argument type list_','_Return type list_')or die $^E;
my $val= $res->Call();
print ($val);
The documentation for
Win32::API‘sCall()method suggests that you must passCall()a scalar which will be used as a buffer to store the returned value; Call() itself will return whether the call succeeded or not.Example:
EDIT: quoting from the docs for completeness:
The two parameters needed here are the length of the buffer that will hold the returned temporary path, and a pointer to the buffer itself. For numerical parameters, you can use either a constant expression or a variable, while for pointers you must use a variable name (no Perl references, just a plain variable name). Also note that memory must be allocated before calling the function, just like in C. For example, to pass a buffer of 80 characters to GetTempPath(), it must be initialized before with:
This allocates a string of 80 characters. If you don’t do so, you’ll probably get Runtime exception errors, and generally nothing will work. The call should therefore include:
And the result will be stored in the $lpBuffer variable. Note that you don’t need to pass a reference to the variable (eg. you don’t need \$lpBuffer), even if its value will be set by the function.