Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2005
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: ParallelIO (mathlink windows program) Help Please

  • To: mathgroup at smc.vnet.net
  • Subject: [mg61776] Re: [mg61763] ParallelIO (mathlink windows program) Help Please
  • From: Todd Gayley <tgayley at wolfram.com>
  • Date: Sat, 29 Oct 2005 01:32:42 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Hu,

Rather than address your specific questions about C++, I am going to point 
out that there is a _much_ easier way to call inpout32.dll than writing 
your own MathLink program. .NET/Link gives Windows users the ability to 
call DLL functions directly from Mathematica by simply writing a one-line 
function declaration much like you would write in Visual Basic or C#. For 
this example:

    <<NETLink`
    ParallelRead = DefineDLLFunction["Inp32", "d:\\inpout32.dll", "void", 
{"short"}];
    ParallelWrite = DefineDLLFunction["Out32", "d:\\inpout32.dll", "void", 
{"short", "short"}];

Then call the functions as before:

    ParallelWrite[888, 1234]

No C++ code, no .tm files, no compilers.


Todd Gayley
Wolfram Research


At 02:26 AM 10/28/2005, Zhe Hu wrote:

>Inspired by SerialIO (a mathlink program accessing the serial port), I tried
>to have Mathematica be able to read/write the parallel port on the Windows
>XP PC.
>
>There is a graceful solution (built upon native device driver) to read/write
>parallel port under Windows XP at http://www.logix4u.net/inpout32.htm. All
>you need is a dll (no need to install or anything), which exports both inp32
>that reads the parallel port and outp32 that writes to the port.
>
>So the rest of the work seemed quite textbooky at first thought. (I use VC++
>6.0 and Mathlink V4r11)
>
>(0) define the template file as:
>
>:Begin:
>:Function: Inp32
>:Pattern: ParallelRead[port_]
>:Arguments: {port}
>:ArgumentTypes: {ShortInteger}
>:ReturnType: ShortInteger
>:End:
>
>:Begin:
>:Function: Out32
>:Pattern: ParallelWrite[port_, data_]
>:Arguments: {port, data}
>:ArgumentTypes: {ShortInteger, ShortInteger}
>:ReturnType: Manual
>:End:
>
>(1) write the entry point as:
>
>int main(int argc, char* argv[])
>{
>return MLMain(argc, argv);
>}
>
>(2) wrap the built exe file in a *.m file as
>BeginPackage["ParallelIO`"];
>
>ParallelRead::usage=""
>
>ParallelWrite::usge=""
>
>Begin["`Private`"];
>
>$Link = Install["ParallelIO"];
>
>End[]; (* `Private` *)
>
>EndPackage[];
>
>=======================================
>
>However things weren't so smooth at all.
>
>(1) if all the files are in C, the VC linker just can't find Inp32 and
>Out32, though I definitely incorporate the lib file. So I have to rename
>each file to *.cpp, including "mprep parallel.tm <http://parallel.tm> -o
>parallel.cpp" which is against the "rule"
>
>(2) The original definition
>short _stdcall Inp32(short PortAddress);
>void _stdcall Out32(short PortAddress, short data);
>
>has to be wrapped into
>
>short mInp32(short Port)
>{
>return Inp32(Port);
>}
>
>void mOut32(short Port, short data)
>{
>Out32(Port, data);
>}
>
>(3) Then MathLink got stuck once I do ParallelWrite[888, (someNumber)] in
>Mathematica. So I have to change to
>int mOut32(short Port, short data)
>{
>Out32(Port, data);
>return 0;
>}
>
>&
>
>:Begin:
>:Function: mOut32
>:Pattern: ParallelWrite[port_, data_]
>:Arguments: {port, data}
>:ArgumentTypes: {ShortInteger, ShortInteger}
>:ReturnType: Integer
>:End:
>
>====================================
>
>The surprise is that after all these twists of trial and error, the thing
>worked.
>
>So my confusion is that:
>(1) How well does MathLink code go with C++? I don't mean to use class, jus=
>t
>work with other C++ files in VC++ compiler. (There is pretty much
>contradictory discussion that can be googled already. Please someone at
>least show some sample VC++ project files)
>(2) If a C/C++ function return type is "void", is that the ":ReturnType:"
>should be "Manual". But then does this function need to send some package
>back or free something at the end, otherwise the link seems to get stuck.
>
>I'd love to send my source code, etc. in a zipped file to anyone who would
>be interested in taking a look.
>
>Thanks a lot.
>
>Sincerely,
>Hu Zhe


  • Prev by Date: Re: A Problem with the NonlinearFit?
  • Next by Date: Re: A Problem with the NonlinearFit?
  • Previous by thread: ParallelIO (mathlink windows program) Help Please
  • Next by thread: graphing x^2+4 on x, y, and i