in reply to Re^2: Call C DLL Functions in Perl
in thread Call C DLL Functions in Perl

I said as much, but it is the proper usage based on the information you posted. Is there anything to make you think it's a problem with how you call the function?

Replies are listed 'Best First'.
Re^4: Call C DLL Functions in Perl
by Anonymous Monk on Feb 18, 2012 at 16:57 UTC
    I think the issue is in the data types. I char *strDataSource is not properly being sent to the DLL from Perl. If there is a way to mimic the C data type (char *) in Perl, the problem might be resolved. Do you have any thoughts on the data type conversion between C and Perl?
Re^4: Call C DLL Functions in Perl
by sraghu_rs (Initiate) on Feb 18, 2012 at 16:59 UTC
    I think the issue is in the data types. I char *strDataSource is not properly being sent to the DLL from Perl. If there is a way to mimic the C data type (char *) in Perl, the problem might be resolved. Do you have any thoughts on the data type conversion between C and Perl?

      What Mr Inscrutable almost tried to convey to you but couldn't be bothered to phrase in terms intelligible to non-aliens is:

      You should not need to do anything to Perl strings in order to pass them to your DLL via Win32::API.

      That is, you should not need to use pack or anything else. This should work:

      use Win32::API; my $dec = Win32::API->new('mydll.dll', 'OpenConnection', 'PPP', 'L') o +r die $^E; $return = $dec->Call( 'test', 'test', 'test' ); print $return;

      Assuming that there is a database called 'test', and a user called 'test', with 'test' as the password.

      If that doesn't work, then you'll need to tell us how you know it didn't work.

      Ie. Did you get an error message? If so, what was it? If not, what other indication do you have that it didn't work?


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

      The start of some sanity?

      The proper way is

      $return = $dec->Call($strDatabase, $strLoginUser, $strLoginPwd)

      You've even shown this works in (2).

      If that doesn't work, your information about the function is wrong or your conclusion is wrong about it being related to your calling convention is wrong. Go verify those.