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

  • To: mathgroup at smc.vnet.net
  • Subject: [mg66377] Re: Problem calling function in DLL via NETLink: NET::netexcptn: A .NET exception occurred
  • From: Heiko Damerau <heiko.damerau.news at web.de>
  • Date: Thu, 11 May 2006 02:14:58 -0400 (EDT)
  • Organization: CERN - European Laboratory for Particle Physics
  • References: <e3sgh9$lph$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Todd,

     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,
Heiko



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