title: How to call DLL exported functions with @<number> at end of function name from C
body: <p>I am trying to call functions from ntvdm.lib in Visual Studio 2019 using the Visual Studio 2017 - Windows XP (v141_XP) platform toolset, with the following defined:</p>
  <pre><code>#define _WIN32_WINNT 0x0501
  #define i386
  </code></pre>
  <p>running dumpbin /exports on the LIB file I get the following output:</p>
  <pre><code>Microsoft (R) COFF/PE Dumper Version 14.29.30037.0
  Copyright (C) Microsoft Corporation.  All rights reserved.
  
  
  Dump of file ntvdm.lib
  
  File Type: LIBRARY
  
       Exports
  
         ordinal    name
  
                    _BlockWOWIdle@4
                    _CurrentMonitorTeb
                    _DBGNotifyDebugged@4
                    _DBGNotifyNewTask@8
                    _DBGNotifyRemoteThreadAddress@8
                    _DispatchInterrupts@0
                    _Dos_Flag_Addr
                    _DpmiSetIncrementalAlloc@4
                    _ExpLdt
                    _FlatAddress
                    _GetDOSAppName@4
                    _InitialVdmDbgFlags
                    _InitialVdmTibFlags
                    _IsCdRomFile@4
                    _MGetVdmPointer@12
                    _RedirectLongFileName@12
                    _RedirectShortFileName@12
                    _RegisterWOWIdle@0
                    _ResumeTimerThread@0
                    _SelectorLimit
                    _SetShadowDescriptorEntries@8
                    _ShortPathEnvVar@4
                    _Sim32pGetVDMPointer@8
                    _SoftPcEoi@8
                    _SuspendTimerThread@0
                    _VDDAllocMem@12
                    _VDDAllocateDosHandle@12
                    _VDDAssociateNtHandle@12
                    _VDDDeInstallIOHook@12
                    _VDDDeInstallMemoryHook@12
                    _VDDDeInstallUserHook@4
                    _VDDExcludeMem@12
                    _VDDFreeMem@12
                    _VDDIncludeMem@12
                    _VDDInstallIOHook@16
                    _VDDInstallMemoryHook@16
                    _VDDInstallUserHook@20
                    _VDDQueryDMA@12
                    _VDDReleaseDosHandle@8
                    _VDDReleaseIrqLine@8
                    _VDDRequestDMA@16
                    _VDDReserveIrqLine@8
                    _VDDRetrieveNtHandle@16
                    _VDDSetDMA@16
                    _VDDSimulate16@0
                    _VDDTerminateVDM@0
                    _VdmDbgAttach@0
                    _VdmGetParametersInfoError@0
                    _VdmMapFlat@12
                    _VdmParametersInfo@12
                    _VdmTraceEvent@12
                    _WOWSysErrorBox@20
                    _WaitIfIdle@0
                    _call_ica_hw_interrupt@12
                    _cmdCheckTemp@4
                    _cmdCheckTempInit@0
                    _cpu_createthread@8
                    _demClientErrorEx@12
                    _demFileDelete@4
                    _demFileFindFirst@12
                    _demFileFindNext@4
                    _demGetFileTimeByHandle_WOW@4
                    _demGetPhysicalDriveType@4
                    _demIsShortPathName@8
                    _demLFNCleanup@0
                    _demLFNGetCurrentDirectory@8
                    _demSetCurrentDirectoryGetDrive@8
                    _demWOWLFNAllocateSearchHandle@4
                    _demWOWLFNCloseSearchHandle@4
                    _demWOWLFNEntry@4
                    _demWOWLFNGetSearchHandle@4
                    _demWOWLFNInit@4
                    _fSeparateWow
                    _getAF@0
                    _getAH@0
                    _getAL@0
                    _getAX@0
                    _getBH@0
                    _getBL@0
                    _getBP@0
                    _getBX@0
                    _getCF@0
                    _getCH@0
                    _getCL@0
                    _getCS@0
                    _getCX@0
                    _getDF@0
                    _getDH@0
                    _getDI@0
                    _getDL@0
                    _getDS@0
                    _getDX@0
                    _getEAX@0
                    _getEBP@0
                    _getEBX@0
                    _getECX@0
                    _getEDI@0
                    _getEDX@0
                    _getEFLAGS@0
                    _getEIP@0
                    _getES@0
                    _getESI@0
                    _getESP@0
                    _getFS@0
                    _getGS@0
                    _getIF@0
                    _getIP@0
                    _getIntelRegistersPointer@0
                    _getMSW@0
                    _getOF@0
                    _getPF@0
                    _getSF@0
                    _getSI@0
                    _getSP@0
                    _getSS@0
                    _getZF@0
                    _host_CreateThread@24
                    _host_ExitThread@4
                    _host_com_close@4
                    _host_direct_access_error@4
                    _host_simulate@0
                    _pDeviceChain
                    _setAF@4
                    _setAH@4
                    _setAL@4
                    _setAX@4
                    _setBH@4
                    _setBL@4
                    _setBP@4
                    _setBX@4
                    _setCF@4
                    _setCH@4
                    _setCL@4
                    _setCS@4
                    _setCX@4
                    _setDF@4
                    _setDH@4
                    _setDI@4
                    _setDL@4
                    _setDS@4
                    _setDX@4
                    _setEAX@4
                    _setEBP@4
                    _setEBX@4
                    _setECX@4
                    _setEDI@4
                    _setEDX@4
                    _setEFLAGS@4
                    _setEIP@4
                    _setES@4
                    _setESI@4
                    _setESP@4
                    _setFS@4
                    _setGS@4
                    _setIF@4
                    _setIP@4
                    _setMSW@4
                    _setOF@4
                    _setPF@4
                    _setSF@4
                    _setSI@4
                    _setSP@4
                    _setSS@4
                    _setZF@4
  
    Summary
  
            BD .debug$S
            14 .idata$2
            14 .idata$3
             4 .idata$4
             4 .idata$5
             A .idata$6
  </code></pre>
  <p>The function definition I'm trying to call in VDDSVC.h is:</p>
  <pre><code>#define GetVDMPointer(Address, Size, Mode) Sim32GetVDMPointer(\
                          Address, Size, Mode)
  </code></pre>
  <p>However visual studio error is:</p>
  <pre><code>Error   LNK2019 unresolved external symbol _MGetVdmPointer referenced in function _VddDispatch
  </code></pre>
  <p>_MGetVdmPointer is in the lib file but referenced as <strong>_MGetVdmPointer@12</strong></p>
  <ul>
  <li>I reviewed the options here but couldn't determine which one might apply in my scenario <a href="https://docs.microsoft.com/en-us/cpp/error-messages/tool-errors/linker-tools-error-lnk2019?view=msvc-170" rel="nofollow noreferrer">https://docs.microsoft.com/en-us/cpp/error-messages/tool-errors/linker-tools-error-lnk2019?view=msvc-170</a></li>
  <li>In <strong>Linker</strong> -&gt; <strong>General</strong> -&gt; <strong>Show Progress</strong> I tried setting <strong>/VERBOSE</strong> although no additional information was generated in the logs</li>
  <li>I tried changing calling convention to &quot;<strong>__stdcall</strong>&quot; in C/C++ -&gt; Advanced Calling Convention</li>
  <li>I've tried changing files from .C to .CPP although get similar error (Although the symbol looked for is a c++ mangled style name)</li>
  </ul>