Reputation: 2576
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:
#define _WIN32_WINNT 0x0501
#define i386
running dumpbin /exports on the LIB file I get the following output:
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
The function definition I'm trying to call in VDDSVC.h is:
#define GetVDMPointer(Address, Size, Mode) Sim32GetVDMPointer(\
Address, Size, Mode)
However visual studio error is:
Error LNK2019 unresolved external symbol _MGetVdmPointer referenced in function _VddDispatch
_MGetVdmPointer is in the lib file but referenced as _MGetVdmPointer@12
Upvotes: 0
Views: 155
Reputation: 2576
The issue was calling convention needs to be modified to "__stdcall" in C/C++ -> Advanced Calling Convention
Which I had tried, however Visual Studio 2019 project properties was defaulting to configuration for "Release" build and not the current build type "Debug(Active)" which effectively made my initial change of that setting ineffective.
As suggested in comments by IInspectable:
When changing global project properties, always make sure the "Configuration" is set to "All Configurations" and "Platform" is set to "All Platforms"
Upvotes: 1