title: PInvoke signature does not match the unmanaged target signature
body: <p>I'm trying to create a wrapper C# file for modbusm.dll (win-tech.com/html/mbusocx.htm) ,I'm using dumpbin output for this.</p>
  
  <p>Dump of file modbusm.dll</p>
  
  <blockquote>
    <p>File Type: DLL</p>
    
    <p>Section contains the following exports for modbusm.dll</p>
  
  <pre><code>00000000 characteristics
  41128817 time date stamp Fri Aug 06 00:48:47 2004
      0.00 version
         1 ordinal base
        27 number of functions
        27 number of names
  
  ordinal hint RVA      name
  
        1    0 000085BA _AbortTheCall@4
        2    1 00003441 _CloseConnection@4
        3    2 000033A7 _ConnectASCII@12
        4    3 000033E1 _ConnectDanielsASCII@12
        5    4 000033C4 _ConnectDanielsRTU@12
        6    5 0000338A _ConnectRTU@12
        7    6 00001019 _ConnectTCP2@12
        8    7 00001000 _ConnectTCP@8
        9    8 0000829A _DialCall@8
       10    9 00003376 _EnableConnectionCallback@4
       11    A 00003342 _EnableModbusCallback@8
       12    B 00008123 _GetCallState@8
       13    C 00007FD2 _GetLineDeviceName@12
       14    D 00003320 _GetPollDelay@0
       15    E 00003339 _Get_Modbus_DLL_Revision@0
       16    F 000033FE _HookRspNotification@16
       17   10 000032ED _InitializeWinSock@0
       18   11 0000277C _MBAPWndProc@16
       19   12 0000393F _MODBUSResponse@16
       20   13 00007EAA _NumberOfLineDevices@0
       21   14 00003521 _PollMODBUS@8
       22   15 000039F2 _ReadDebugData@16
       23   16 00003BA4 _ReadTransparentResponse@16
       24   17 0000332A _SetPollDelay@4
       25   18 00003313 _UnInitializeWinSock@0
       26   19 00003712 _WriteMODBUS@12
       27   1A 00003AB3 _WriteTransparentString@12
  </code></pre>
    
    <p>Summary</p>
  
  <pre><code>    5000 .data
      2000 .rdata
      2000 .reloc
      1000 .rsrc
      C000 .text
  </code></pre>
  </blockquote>
  
  <p>my C# wrapper is</p>
  
  <pre><code>class MbMasterV7
      {
          [DllImport("modbusm.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode, EntryPoint = "_ConnectTCP2@12")]
          public static extern int ConnectModbusTCP(short Port);
  
  
          public static string TCPDevice { set; get; }
      }
  </code></pre>
  
  <p>when I am running the code </p>
  
  <pre><code>MbMasterV7.TCPDevice = "127.0.0.1";  // from  demo version of .ocx file converted using tlbimp.exe
  MbMasterV7.ConnectModbusTCP(502);
  </code></pre>
  
  <p>in visual studio, I am getting exception</p>
  
  <blockquote>
    <p>A call to PInvoke function
    'TestApp!TestApp.MbMasterV7::ConnectModbusTCP' has unbalanced the
    stack. This is likely because the managed PInvoke signature does not
    match the unmanaged target signature. Check that the calling
    convention and parameters of the PInvoke signature match the target
    unmanaged signature.</p>
  </blockquote>
  
  <p>I have tried all calling conventions and getting same error.
  The .Net libraries are available for modbus protocol are not good enough for the new plc type I am working with. </p>
  
  <pre><code>FILE HEADER VALUES
               14C machine (x86)
                 5 number of sections
          41128817 time date stamp Fri Aug 06 00:48:47 2004
                 0 file pointer to symbol table
                 0 number of symbols
                E0 size of optional header
              210E characteristics
                     Executable
                     Line numbers stripped
                     Symbols stripped
                     32 bit word machine
                     DLL
  
  OPTIONAL HEADER VALUES
               10B magic # (PE32)
              6.00 linker version
              C000 size of code
              A000 size of initialized data
                 0 size of uninitialized data
              94E4 entry point (100094E4)
              1000 base of code
              D000 base of data
          10000000 image base (10000000 to 10016FFF)
              1000 section alignment
              1000 file alignment
              4.00 operating system version
              0.00 image version
              4.00 subsystem version
                 0 Win32 version
             17000 size of image
              1000 size of headers
                 0 checksum
                 2 subsystem (Windows GUI)
                 0 DLL characteristics
            100000 size of stack reserve
              1000 size of stack commit
            100000 size of heap reserve
              1000 size of heap commit
                 0 loader flags
                10 number of directories
              DF90 [     357] RVA [size] of Export Directory
              D7C8 [      50] RVA [size] of Import Directory
             14000 [     3E8] RVA [size] of Resource Directory
                 0 [       0] RVA [size] of Exception Directory
                 0 [       0] RVA [size] of Certificates Directory
             15000 [     BC0] RVA [size] of Base Relocation Directory
                 0 [       0] RVA [size] of Debug Directory
                 0 [       0] RVA [size] of Architecture Directory
                 0 [       0] RVA [size] of Global Pointer Directory
                 0 [       0] RVA [size] of Thread Storage Directory
                 0 [       0] RVA [size] of Load Configuration Directory
                 0 [       0] RVA [size] of Bound Import Directory
              D000 [     198] RVA [size] of Import Address Table Directory
                 0 [       0] RVA [size] of Delay Import Directory
                 0 [       0] RVA [size] of COM Descriptor Directory
                 0 [       0] RVA [size] of Reserved Directory
  </code></pre>