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

@ikegami - Even after passing like that, it is not working.

Replies are listed 'Best First'.
Re^3: Call C DLL Functions in Perl
by runrig (Abbot) on Feb 09, 2012 at 15:34 UTC
    Maybe "test" is not a valid database/user/password?
Re^3: Call C DLL Functions in Perl
by ikegami (Patriarch) on Feb 12, 2012 at 04:11 UTC
    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?
      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?
      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.