C# to VB.net conversion: byte pointers etc
Hello,
I need to convert the following code from C# to Vb.net (it's part of an EMV API).
unsafe public uint InputPIN(ref byte pPinNum)
{
MessageBox.Show("Input Password and Push Enter !");
Event_EndOfPinInput.Reset();
Event_EndOfPinInput.WaitOne();
if (txtPassword.InvokeRequired)
{
string strPassword = Invoke(new GetPasswordTextCallback(GetPasswordText), new object[] { }).ToString();
byte[] byPassword = StrToByteArray(strPassword);
fixed (byte* _pPinNum = &pPinNum)
{
byte* ps = _pPinNum;
for (int i = 0; i < 4; i++)
*(ps + i) = byPassword[i];
}
}
return 1;
}
Result should be something like this:
' InputPin
Public Function InputPIN(ByRef pPinNum As Byte) As UInteger
MessageBox.Show("Input Password and Push Enter !")
Event_EndOfPinInput.Reset()
Event_EndOfPinInput.WaitOne()
If txtPassword.InvokeRequired Then
Dim strPassword As String = Invoke(New GetPasswordTextCallback(AddressOf GetPasswordText), New Object() {}).ToString()
Dim byPassword As Byte() = StrToByteArray(strPassword)
'...
End If
Return 1
End Function
I am stuck with the conversion of the 'fixed' structure. I understand VB.net has no equivalent for unsafe structures.
I think the functions needed to achieve this would be Marshal.Copy and/or GCHandle.
I am not sure why parameter pPinNum is returned as byte, I assume it's a pointer of some sort.
The function is defined like this in the API manual:
pfn_InputPIN
Display input PIN User Interface and give PIN that entered to EMV Kernel. You have to user
S/W PIN PED for receiving PIN. If not, this kernel will not work well.
Prototype BOOL (*pfn_InputPIN)(unsigned char *pPinNum);
Return BOOL
Whether input is available or not.
Parameter Description
pPinNum [out] Store PIN Number to this variable.
ex) 1234
pPinNum[0] = 1
pPinNum[1] = 2
pPinNum[2] = 3
pPinNum[3] = 4
Could do with some help ;-)
Thanks for looking.