我有一个项目,我需要在Windows 7下的VS2010中使用C ++。该项目最初是为在WinCE上运行而开发的。它是用VC ++开发的,但链接到WinCE开发环境中使用的一些库。
该项目使用:: VirtualCopy无法编译,因为我相信它在Coredll.lib中。在WinCE环境中。 https://msdn.microsoft.com/en-us/library/aa450977.aspx
error LNK2028: unresolved token (0A000B85) "extern "C" int __cdecl VirtualCopy(void *,void *,unsigned long,unsigned long)" (?VirtualCopy@@$$J0YAHPAX0KK@Z) referenced in ..
error LNK2019: unresolved external symbol "extern "C" int __cdecl VirtualCopy(void *,void *,unsigned long,unsigned long)" (?VirtualCopy@@$$J0YAHPAX0KK@Z) referenced in ..
我的代码中的函数是通过以下引用:
extern "C"
{
BOOL VirtualCopy(LPVOID lpvDest, LPVOID lpvSrc, DWORD cbSize, DWORD fdwProtect);
}
然后使用:
if( ! ::VirtualCopy(pVMem, reinterpret_cast<void *>(dwASIC_REGISTERS_BASE), tSystemInfo.dwPageSize, PAGE_READWRITE | PAGE_NOCACHE) )
{
DWORD dwError = ::GetLastError();
TRACE1("Failed ", dwError);
return;
}
项目使用:
我有几个问题:
非常感谢任何帮助
非常感谢
答案 0 :(得分:0)
我不是WinCE编程方面的专家,但下面是一些想法:
似乎该函数用于将程序代码(虚拟地址)中可访问的指针映射到某些设备寄存器(物理地址)。在嵌入式编程中,这种方法用于直接驱动器件(例如,点亮连接到SoC的LED)。
我相信在Win32中这样的功能是无法访问的,因为直接设置/读取寄存器是为设备驱动程序而不是应用程序代码保留的。
我认为在Win32环境中无法链接WinCE库。但更重要的是,即使有办法实现这一点,您也无法获得任何东西 - 寄存器(物理地址)特定于嵌入式设备。在PC上,这个特定的物理地址可能指向RAM,因此您将在其他应用程序的地址空间中写入。
你不应该避免缺乏VirtualCopy功能。您应该了解代码在设备上执行的操作,然后将其删除(如果不需要应用程序行为),或者以适合Win32环境的方式实现它。