Re: Re: Re: mathlink & Visual C++
- To: mathgroup at smc.vnet.net
- Subject: [mg15075] Re: [mg15030] Re: [mg15009] Re: mathlink & Visual C++
- From: "Richard W. Singerman" <rws at helix.nih.gov>
- Date: Thu, 10 Dec 1998 03:13:06 -0500
- Sender: owner-wri-mathgroup at wolfram.com
In response to the posting, I have tried to make a simple example. What
do I need to modify to make it work?
Please comment. I'm finding this
introduction to MathLink and visual c++ rather painful.
Note: I'm using Borland ver. 5 c++ for windows95.
****************************************************************
#ifdef
__cplusplus
extern "C" {
#endif
//... C function declarations here ....
MLENV MLInitialize(0);
int MLActivate(Mlink link);
MLINK MLOpenArgv(MLENV env, char **argv0, char **argv1, long *errno);
void MLClose(MLINK link);
?? MLPutString(stdlink, char *s);
#ifdef __cplusplus
};
#endif
#include "mathlink.h"
main(int argc, char *argv[]) {
MLENV env;
MLINK link;
long *errno;
env = MLInitialize(0);
mylink = MLOpenArgv(env, argv,argv+argc, &errno);
MLActivate(mylink);
MLPutFunction( mylink, "ToExpression", 1);
MLPutString( mylink, "b = Sin[Pi/2]");
MLClose( mylink);
}
If I compile this in C++ (Borland ver. 5 for windows95) and run it,
I would like to see this pop up in my mathematica session and
evaluate to "1". Can I then go to the mathematica window and use "b" in
expressions?
--richard
******************************************************************
>From: MJE <evans_nospam at gte.net>
>Subject: [mg15075] PRIVATE REPLY Re: [mg15019] error from MathLink,
plotting results from a c++ simulation
Richard,
MathLink cannot handle C++ directly. I just made a post to the group on
that topic, answering someone else's problems.
You have to treat all your MathLink code as plain C and compile it that
way. To use it from C++, use the usual header file trick,
#ifdef __cplusplus
extern "C" {
#endif
... C function declarations here .... #ifdef __cplusplus
};
#endif
which warns the C++ compiler to call the MathLink stuff as plain C. Make
sure to use a .c extension with the mprep tool, not a .cpp extension.
*****************************************************************
On Wed, 9 Dec 1998, MJE wrote:
> Apropos of that --
>
> I've had problems going way back to version 2 with MathLink not working
> under C++; and that was on Macintosh. I ended up having to wrap all
> the MathLink code in "extern 'C'". That was a long time ago. Now I
> learn that things are still this way.
>
> MathLink is hard enough to master without the hassles of C vs. C++
> interfacing. What this problem means is that all the books on C++
> algorithms are useless with MathLink. (You have to create a plain-C
> buffer between MathLink and the algorithms if you want to use them.)
> It also means that nice, clean, object-based string-handling functions
> cannot be used to deal with the string expression requirements of
> MathLink.
>
> It's ironic that WRI is selling MathCode C++ without having fixed this
> problem with MathLink itself. Maybe they could get the people who
> built MathCode C++ to work on fixing MathLink as well.
>
>
> Mark
> remove "_nospam" to reply
>
>
>
> Kevin Leuthold wrote:
> >
> > I had a private email conversation with John regarding the problem he
> > described, and want to share with the whole group my answer to him
> > since it may be of interest to anyone else compiling MathLink programs
> > with Visual C++.
> >
> > John was giving mprep-generated code a .cpp extension, rather than a .c
> > extension. In other words, instead of
> >
> > mprep addtwo.tm -o addtwotm.c
> >
> > he was typing
> >
> > mprep addtwo.tm -o addtwotm.cpp
> >
> > Unfortunately, mprep generates code that fails to compile under the
> > stronger type checking that Visual C++ performs on .cpp files. This
> > probably should be considered a bug in mprep.
> >
> > Fortunately, there is a simple workaround, which is to always give
> > mprep-generated code a .c extension rather than .cpp. Of course, this
> > would mean that any C++ code in a .tm file would have to be taken out
> > and put in a .cpp file.
> >
> > Other than this bug that John has pointed out, there are no known
> > problems with building MathLink programs using Microsoft Visual C++
> > 6.0.
> >
> > Kevin Leuthold
> > MathLink Group
> > Wolfram Research
> >
> > John Gore <gore_john at bah.com> writes:
> >
> > >I just moved to Vis C++ 6.0 from 4.0 and cant get my mathlink programs
> > >to compile.
> >
> > > I have problems with the MLInitializeIcon routine produced by mprep. I
> > >get errors from a lack of casting on structs HINSTANCE and HBRUSH
> >
> > >This happens even in the addtwo example.
> >
> > >Anyone using MS Vis C++ 6.0 ?
> >
> > >Im using Mathematica 3.01
> > >Current version of Mathlink as Downloaded Windows 95
> >
> > >Thanks - JG
>
>