gluphus has asked for the wisdom of the Perl Monks concerning the following question:

I am in the process of moving from a vanilla COM
communication system to a USB virtual COM (using the ftdi chip and driver).

Whenever I attempt to use my standard Win32::SerialPort, it croaks in CommPort.pm at CreateFile.

From what I could find, the problem* seems to be the way the FileHandle is called in kernel32...

(from another forum discussing this driver):
"I know that all of the Win32 API dlls, such as
kernel32.dll, use the _stdcall convention. It is my
understanding that any non-C programs linking to a dll require the _stdcall parameter passing convention.

BTW, the difference betweeen the two calling conventions is that when using _cdecl, the calling program cleans up the stack after the call, but with _stdcall, the called (dll) program does the cleanup."

Bottom line, has anyone had such an issue before and can they share the code modifications on how they made it work?

--------------------------------------------------
The error I get when I run is from CommPort.pm, sub CreateFile and says:

The system cannot find the file specified. can't open device: COM10
....

Replies are listed 'Best First'.
Re: Perl->Win32::CommPort->COM ports->Kernel32->ftdi driver
by Corion (Patriarch) on Feb 08, 2007 at 15:54 UTC

    My guess is that Win32::SerialPort isn't using the CreateFile API, or is using it in a way that doesn't allow to specify COM ports beyond 9. I guess you have two possible approaches - the first is the way of lesser resistance by moving the USB device to a COM port below 10, the other is to investigate how to convince Win32::SerialPort to use "\\\\.\\COM10", which seems to be the extended syntax to access COM ports beyond 9.

      You better get on the plane to Sweden, I am nominating you for the Nobel prize...
      I changed the COM10 to COM2 and all was well.
      You saved me from going to the dark side (visual C++).
      You are the wind under my wings.