MathGroup Archive 2006

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Problem calling function in DLL via NETLink: NET::netexcptn: A .NET exception occurred


     Thanks a lot for your fast reply. I changed the type to "long" now 
but the problems remain the same. Sometimes, everything works and 
sometimes I get these "NET::netexcptn" messages. Furthermore, I found 
that the NET object was not not released after it was not needed 
anymore. So now I added ReleaseNETObject, but still without success with 
respect to the errors.

     To my mind, there seem to be a problem with memory allocation 
somewhere because there are even error windows from Visual C++ (e.g. 
'Assertion failed, Program: 
...hematica\5.2\AddOns\NETLink\InstallableNET.exe, File: 
GIOPServerWorker.cpp, Line: 1018, Expression: false') that pop up 
occasionally or error windows like 'Cannot access memory address 
0x212....'. I did not have similar effects using Mathematica before.

     I am using version 5.2 of Mathematica for windows.

     Many thanks in advance for any kind of information to that problem.

Best regards,

Todd Gayley schrieb:
> At 01:35 AM 5/9/2006, Heiko Damerau wrote:
>> 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.
> Heiko,
> One problem is that the "byte" type (DataSize) in your DefineDLLFunction 
> should be "long."
> Todd Gayley
> Wolfram Research

  • Prev by Date: Re: Finding roots of equalities involving Legendre Polynomials
  • Next by Date: Re: JLink : JavaNew Failure
  • Previous by thread: Re: Problem calling function in DLL via NETLink: NET::netexcptn: A .NET exception occurred
  • Next by thread: Question on Map or Apply