char** and uuid_t type issue with DefineDLLFunction
- To: mathgroup at smc.vnet.net
- Subject: [mg107433] char** and uuid_t type issue with DefineDLLFunction
- From: "Jamel Tayeb" <jameltayeb at gmail.com>
- Date: Fri, 12 Feb 2010 04:44:10 -0500 (EST)
Hi Team, I have two issues with Mathematica and a function stored in a native dll; and I would like to have your advice. I have a DLL with a function f written in C. The prototype of f is int f(const char *, unsigned int, const char**, uuid_t *); I want to use the DefineDLLFunction so I can call f from Mathematica. I am using the following expression: f = DefineDLLFunction["f", ".\\f.dll", "int", {"char *", "unsigned int", "char **", "out X*"}]. (I will explain the X a bit later). The first issue I have is the char** type which generates the error below: ---Begin Error----------------------------------------------------------------------- -------------------------------------------- NET::netexcptn: A .NET exception occurred: System.TypeLoadException: Type System.char** not found. at Wolfram.NETLink.TypeLoader.GetType(String typeName, String assemblyName, Boolean throwOnError) at Wolfram.NETLink.Internal.DLLHelper.CreateDLLCall(String funcName, String dllName, String callConv, String retTypeName, String[] argTypeNames, Boolean[] areOutParams, String strFormat) at Wolfram.NETLink.Internal.CallPacketHandler.createDLL1(KernelLinkImpl ml). Out[2]= $Failed ---End Error----------------------------------------------------------------------- -------------------------------------------- Indeed, I found no examples of char** type argument in the documentation and the .NET/LINK user guide. Can somebody indicate me the type I should use with DefineDLLFunction for the third argument of f? The second problem (materialized by the X in the expression presented earlier) is probably more tricky. Similarly to char**, I could not find a reference to a uuid_t type support in Mathematica. FYI, uuid_t is used to implement Unique Universal Identifiers (RFC 4122). Since a UUID is a 128 bit data type, is there a way to use UnsignedInteger128 - with some sort of type cast? I do not have use of the 128 bits returned by f, but the function gracefully fails if the pointer is NULL. Thanks for any help you may provide me, Merci, - Jamel