Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Problems with data types from external dll

Tags:

.net

vb.net

dll

I use Philip's MfRc500.dll for communicating with RFID chips. It contains a function for reading data, which is defined like this:

signed char Mf500PiccRead(unsigned char addr, unsigned char * data)

I use it in VB.NET like this:

Private Declare Function RFID_PiccRead Lib "MfRc500.dll" Alias "_Mf500PiccRead@8" (ByVal addr As UShort, ByRef value As Long) As Short

and then a wrapper:

Public Function PiccRead(ByVal addr As UShort, ByRef value As Long) As Short
    Return RFID_PiccRead(addr, value)
End Function

The second parameter in function Mf500PiccRead can returns "16 byte data block", so my long data type is too small. If I use byte() instead of long, then i get ExecutionEngineException Exception.

Which data type should I use and how?

like image 871
sventevit Avatar asked Mar 14 '26 01:03

sventevit


1 Answers

The last argument really is a Byte(). ExecutionEngineException indicates that the garbage collected heap got corrupted. Be sure to pass an initialized array that's large enough to contain the response:

    Dim buffer(666) As Byte
    Dim retval As SByte = RFID_PiccRead(42, Buffer)
...
  Private Declare Function RFID_PiccRead Lib "MfRc500.dll" Alias "_Mf500PiccRead@8" _
     (ByVal addr As Byte, Byval buffer() As Byte) As SByte
like image 89
Hans Passant Avatar answered Mar 15 '26 13:03

Hans Passant



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!