Re: Simple MathLink question
- To: mathgroup at smc.vnet.net
- Subject: [mg14715] Re: Simple MathLink question
- From: kevinl (Kevin Leuthold)
- Date: Tue, 10 Nov 1998 01:21:05 -0500
- Organization: Wolfram Research, Inc.
- References: <7257mf$89d@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Jim, There are two problems here that you need to be aware of. The first is that MathLink encodes its data in a private manner. This wouldn't be a problem if you were calling MLPutString with alphanumeric characters, since these characters are represented literally. But it does mean that calling MLPutString on a string with backslashes in it won't work. This is discussed in the MathLink Developer Guide, in the "What's New" section, in a subsection entitled "The Biggest Compatibility Issue". Instead of MLPutString in this situation, consider using MLPutByteString. The second is that when you send a string from your C program to Mathematica, remember that the string will be parsed twice - once by your compiler and once by Mathematica. So, if you do this for example: MLPutFunction( stdlink, "Get", 1); MLPutByteString( stdlink, "D:\\new.txt", 10); then Mathematica will evaluate the command: Get["D:\new.txt"] (with only one backslash). Mathematica will parse this to mean that the string you are passing to Get has 9 characters, the third of which is a newline character ('\n'). So, instead, you want to have 4 backslashes in your C string for every pathname separator: MLPutFunction( stdlink, "Get", 1); MLPutByteString( stdlink, "D:\\\\new.txt", 11); I hope this helps. Kevin Leuthold MathLink Group Wolfram Research Jim McGuire <jimm at opticalres.com> writes: >I am trying to read in a set of Mathematica definitions which was saved >using DumpSave["MathLink_USER.mx",{function1,function2,...}] from >D:\jimm\svgcn018 directory on my NT PC. I have been unsuccessful >reading it into the MathLink session. The definitions are very long >and I do not relish the thought of importing them using MLPut commands. >I tried the following test to see if the link is open. It shows the >proper data is ready to be read by the link >MLPutFunction(stdlink,"EvaluatePacket",1); > MLPutFunction(stdlink,"Plus",2); > MLPutReal(stdlink,2.1) > MLPutInteger(stdlink,2); >MLEndPacket(stdlink); >printf("MLReady = %d\n",MLReady(stdlink)); >However when I try the following, it shows that there is no data to be >read on the stdlink and subsequent attempts to read data hang. >MLPutFunction(stdlink,"EvaluatePacket",1); > MLPutFunction(stdlink,"Get",1); > MLPutString(stdlink,"\"D:\\jimm\\svgcn018\\MathLink_USERSUR.mx\""); >MLEndPacket(stdlink); >printf("MLReady = %d\n",MLReady(stdlink)); >I have tried issuing Get["D:\jimm\svgcn018\MathLink_USERSUR.mx"] from >within Mathematica and it works fine. The desired functions are >loaded. >Many thanks in advance for any assistance. >Jim