Re: mathlink error handling inside :Begin: - :End:
- To: mathgroup at smc.vnet.net
- Subject: [mg109582] Re: mathlink error handling inside :Begin: - :End:
- From: Patrick Scheibe <pscheibe at trm.uni-leipzig.de>
- Date: Thu, 6 May 2010 04:52:16 -0400 (EDT)
Hi, bad idea. If you are interested, you could follow the way how Mathematica registers an external MathLink function by looking inside your .cpp File which was created from your .tm file. There, your pattern and your arguments are used in the _definepattern function which makes nothing more than calling the Kernel function "DefineExternal". You can examine this function to see how Mathematica registers and calls your MathLink function. But why don't you make it easy for yourself and just wrap your ML- func? Make a small Mathematica-Module which 1. Checks the validity of your arguments 2. Does necessary precomputations 3. Calls your ML-func with always valid parameters 4. Returns results or error messages and catches errors from your ML- func Cheers Patrick Am May 5, 2010 um 12:05 PM schrieb olanilsson: > Hi, > > I have a small question about the mathlink-workings (I have gone > through the documentation but can't seem to find an answer). I have an > external mathlink/c++ program with the following signature: > > :Begin: > :Function: readexr > :Pattern: ReadEXR[ s_String ] > :Arguments: { AbsoluteFileName[s] } > :ArgumentTypes: { String } > :ReturnType: Manual > :End: > > :Evaluate: ReadEXR::usage = "ReadEXR[fn] reads an OpenEXR file and > return its rgba channels." > > I thought I was clever when I used AbsoluteFileName, but I can't seem > to detect any file-not-exist error. If I try to open a non-existent > file a message is send to the kernel and printed in the frontend, but > no error is found if I probe for MLError in my C++-code. Thus, my > questions are: > > 1. Could I detect such an error already inside the Begin-End block, > and if so abort execution at this point? Is this approach a good idea? > 2. If not, how can (or should) I detect the error-state in the C++- > code? > > Regards, > > Ola >