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

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?

Replies are listed 'Best First'.
Re^5: Call C DLL Functions in Perl
by BrowserUk (Patriarch) on Feb 18, 2012 at 17:50 UTC

    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?

Re^5: Call C DLL Functions in Perl
by ikegami (Patriarch) on Feb 18, 2012 at 22:21 UTC

    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.