Problem calling function in DLL via NETLink: NET::netexcptn: A .NET exception occurred
- To: mathgroup at smc.vnet.net
- Subject: [mg66319] Problem calling function in DLL via NETLink: NET::netexcptn: A .NET exception occurred
- From: Heiko Damerau <heiko.damerau.news at web.de>
- Date: Tue, 9 May 2006 02:35:24 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hello, I am trying to call a function in an ordinary C++ DLL (should be well tested, not my code). The DLL function I am calling is declared as short SyncRPC FAR PASCAL SyncRPC(const char *locName, const char *locProperty, const char *locCycle, short ArraySize, void *Data, long DataSize, short DataFormat, short DataType) As I do not need the full flexibility when called from Mathematica, it is defined as DLLFunctionSyncRPC = DefineDLLFunction["SyncRPC", "rpcapi32.dll", "short", {"char*", "char*", "char*", "short", "byte[]", "byte", "short", "short"}]; and finally called by DLLFunctionSyncRPC[elementName, property, plsLine, optArraySize, netManagedDataArray, 0, 1, 0]; where elementName, property, plsLine are Mathematica strings, optArraySize is an ordinary mathematica number (integer) and netManagedDataArray is a .NET object declared as NETNew["System.Byte[]", 17optArraySize + 1]; to get the pointer to the result. Everything works fine but sometimes I get strange error messages: NET::netexcptn: A .NET exception occurred: System.NullReferenceException: Object reference not set to an instance of an object. at Wolfram.NETLink.DynamicDLLNamespace.DLLWrapper612.SyncRPC(String , String , String , Int16 , Byte[] , Byte , Int16 , Int16 ) and my notebook is not executed as it should. Changing nothing and just running the Mathematica notebook a second time and the error disappears most of the time. The error appears especially, when I call the DLL function extremely often; but also with a fresh kernel the error normally comes after some 25 calls of the function in the DLL. It would be great if anyone could give me a hint what is wrong with my function calls, because most of the time everything works correctly. Thanks a lot for any information in advance. Best regards, Heiko