in reply to Re^3: Calling a function form an external DLL with Inline::C on windows
in thread Calling a function form an external DLL with Inline::C on windows

Seems like a correct diagnosis.

However, it is possible to work around this issue by declaring all parameters of the wrapper functions as SV*, then manipulating their contents inside - just as you've showed it.

Now I've written all these wrapper functions, and consequently I'm able to get data from the instrument.

All that's left is to integrate it with the existing robot movement and EUT-driver code. I hope I won't run into any further issues with timing, serial comms, windows dark magic, etc.
  • Comment on Re^4: Calling a function form an external DLL with Inline::C on windows

Replies are listed 'Best First'.
Re^5: Calling a function form an external DLL with Inline::C on windows
by Anonymous Monk on Aug 06, 2010 at 14:20 UTC
    I hope I won't run into any further issues with timing, serial comms, windows dark magic, etc.

    Of course there are further issues.

    Win32::SerialPort uses Win32::CommPort which uses Win32::API to export some functions from the Windows API. And it seems that Win32::API doesn't like to work together with Inline::C - at least serial communication doesn't work with the solution derived in the posts above. I get a deluge of error messages, like
    Use of uninitialized value in subroutine entry at C:/Perl/site/lib/Win +32API/CommPort.pm line 213. Use of uninitialized value in subroutine entry at C:/Perl/site/lib/Win +32API/CommPort.pm line 247. Second Read attempted before First is done at measure.pl line 402 Use of uninitialized value $got in numeric ne (!=) at C:/Perl/site/lib +/Win32/SerialPort.pm line 1216. Use of uninitialized value in subroutine entry at C:/Perl/site/lib/Win +32API/CommPort.pm line 213. Use of uninitialized value in subroutine entry at C:/Perl/site/lib/Win +32API/CommPort.pm line 247. Second Read attempted before First is done at measure.pl line 402 Use of uninitialized value $got in numeric ne (!=) at C:/Perl/site/lib +/Win32/SerialPort.pm line 1216.
      Win32::SerialPort uses Win32::CommPort which uses Win32::API to export some functions from the Windows API.
      Where does Win32::SerialPort enter into the equation? The original question specifies that the communication is via TCP/IP, not serial.

      If there is something I missed...

        Sorry for replying so late, I wasn't following the thread anymore. Win32::SerialPort comes in because there are other components of my application beside the data readout that uses TCP/IP: one of these components uses serial communication to drive a positioning system.

        But I was mistaken about the purported incompatibility between Inline::C and Win32::SerialPort, they work together just fine. It was I who introduced a subtle bug in my program that caused those error messages.

        Sorry for the confusion.