title: Input string not updated with dllImport using in c#
body: <p><strong>INTRO</strong></p>
  
  <p>The original working code is in VB6... But, when I try to convert and use in c# it doesn't work</p>
  
  <p><strong>PROBLEM</strong></p>
  
  <p>The problem is on this line in c# </p>
  
  <blockquote>
    <p>Result = Iso14443Anticoll(HANDLE, 147, Uid, MultiTag, 0)</p>
  </blockquote>
  
  <p>Variable <code>Uid</code> doesn't contain (update) any value unlike VB6 it does</p>
  
  <p><strong>USING DLL IN VB6</strong></p>
  
  <pre><code>Declare Function OpenCommPort Lib "MR705API.dll" Alias "?OpenCommPort@@YGHPADPAPAX@Z" (ByVal PortName As String, ByRef hCom As Long) As Long
  Declare Function CloseCommPort Lib "MR705API.dll" Alias "?CloseCommPort@@YGHPAX@Z" (ByVal hCom As Long) As Long
  Declare Function SetLED Lib "MR705API.dll" Alias "?SetLED@@YGHPAXEE@Z" (ByVal hCom As Long, ByVal Led As Byte, ByVal Addr As Byte) As Long
  Declare Function ActiveBuzzer Lib "MR705API.dll" Alias "?ActiveBuzzer@@YGHPAXEE@Z" (ByVal hCom As Long, ByVal DelayTime As Byte, ByVal Addr As Byte) As Long
  Declare Function Iso14443Reqa Lib "MR705API.dll" Alias "?Iso14443Reqa@@YGHPAXEPAEE@Z" (ByVal hCom As Long, ByVal ReqAMode As Byte, ByVal ATQ As String, ByVal Addr As Byte) As Long
  Declare Function Iso14443Anticoll Lib "MR705API.dll" Alias "?Iso14443Anticoll@@YGHPAXEPAE1E@Z" (ByVal hCom As Long, ByVal AnticollMode As Byte, ByVal Uid As String, ByVal MultiTag As String, ByVal Addr As Byte) As Long
  </code></pre>
  
  <p><strong>FUNCTION CALL IN VB6</strong></p>
  
  <pre><code>    Dim HANDLE As Long
      Dim Result As Long
      Dim ATQ As String * 10
      Dim Uid As String * 10
      Dim MultiTag As String * 10
      Dim ID As String
      Dim Temp As String
  
      Result = OpenCommPort(COMPORT, HANDLE)
      If Result = 0 Then
          Result = Iso14443Reqa(HANDLE, 82, ATQ, 0)
          If Result = 0 Then
              Result = SetLED(HANDLE, 1, 0)
              Result = Iso14443Anticoll(HANDLE, 147, Uid, MultiTag, 0)
              MsgBox Uid //there is value contained after input in Iso14443Anticoll()
              ...
              ...
      End Sub
  </code></pre>
  
  <p><strong>USING DLL IN C#</strong></p>
  
  <pre><code>[DllImport ("MR705API.dll",
  EntryPoint="?OpenCommPort@@YGHPADPAPAX@Z")]
  public static extern int OpenCommPort(string portName, ref int hCom); 
  
  [DllImport ("MR705API.dll",
  EntryPoint="?CloseCommPort@@YGHPAX@Z")]
  public static extern int CloseCommPort(int hCom);
  
  [DllImport ("MR705API.dll",
  EntryPoint="?SetLED@@YGHPAXEE@Z")]
  public static extern int SetLED(int hCom, Byte Led , Byte Addr);
  
  [DllImport ("MR705API.dll",
  EntryPoint="?ActiveBuzzer@@YGHPAXEE@Z")]
  public static extern int ActiveBuzzer (int hcom, Byte DelayTime, Byte Addr);
  
  [DllImport ("MR705API.dll",
  EntryPoint="?Iso14443Reqa@@YGHPAXEPAEE@Z")]
  public static extern int Iso14443Reqa (int hcom, Byte ReqAMode, Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString ATQ, Byte Addr);
  
  [DllImport ("MR705API.dll",
  EntryPoint="?Iso14443Anticoll@@YGHPAXEPAE1E@Z"]
  public static extern int Iso14443Anticoll (int hcom, Byte AnticollMode, Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString Uid, Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString MultiTag, Byte Addr);
  </code></pre>
  
  <p><strong>FUNCTION CALL IN C#</strong></p>
  
  <pre><code>    int HANDLE = 0;
      int Result = 0;
      Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString Uid = new FixedLengthString(10);
      Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString ATQ = new FixedLengthString(10);
      Microsoft.VisualBasic.Compatibility.VB6.FixedLengthString MultiTag = new FixedLengthString(10);
      string ID;
      string Temp;
      string IDNow;
  
      Result = OpenCommPort("COM9", ref HANDLE);              
      if (Result == 0) {
          Result = Iso14443Reqa(HANDLE, 82, ATQ, 0);
          if (Result == 0) {
              Result = SetLED(HANDLE, 1, 0);
              Result = Iso14443Anticoll(HANDLE, 147, Uid, MultiTag, 0);
              Debug.WriteLine("Uid :: " + Uid);
              //There is no any update value just contained length = 10
              ....
              ....
  </code></pre>
  
  <p><strong>ADDITIONAL</strong></p>
  
  <p>I already search some information to convert from VB6 to C#
  , These Problem was already resolved</p>
  
  <ol>
  <li>long in vb6 equivalent int int c#</li>
  <li>Entry Point need to be set to prevent <code>System.EntryPointNotFoundException</code></li>
  <li>wrong input signature for dll function may cause <code>System.AccessViolationException</code></li>
  </ol>