Отображение виртуального адреса в физический адрес

У меня есть проект, который мне нужен для работы на C ++ в VS2010 под Windows 7. Первоначально проект был разработан для работы на 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;
}

В проектах используются:

  • MFC в общей DLL
  • Статическая ссылка на ATL
  • Поддержка общеязыковой среды выполнения (/ clr)

У меня есть несколько вопросов:

  1. Есть ли альтернатива?
  2. Можно ли каким-либо образом импортировать некоторые старые библиотеки winCE и ссылаться на них, что позволяет мне использовать эту функцию?

Любая помощь будет принята с благодарностью

Большое спасибо

0

Решение

Я не эксперт в программировании WinCE, но ниже приведены некоторые мысли:

Кажется, что эта функция используется для сопоставления указателя, доступного в программном коде (виртуальный адрес), с некоторыми регистрами устройства (физический адрес). Во встроенном программировании такой подход используется для непосредственного управления устройством (например, зажигание светодиода, подключенного к SoC).

  1. Я считаю, что в Win32 такая функция недоступна, поскольку прямая установка / чтение регистров зарезервирована для драйверов устройств, а не для кода приложения.

  2. Я считаю, что в среде Win32 нет ссылок на библиотеки WinCE. Но что более важно, даже если есть способ достичь этого, вы ничего не получите — регистры (физический адрес) являются специфическими для встроенного устройства. На ПК этот конкретный физический адрес, вероятно, указывает на ОЗУ, поэтому вы будете писать в адресном пространстве другого приложения.

  3. Вы не должны обходить отсутствие функции VirtualCopy. Вы должны понимать, что код сделал на устройстве, а затем либо удалить его (если это не требуется для поведения приложения), либо реализовать его так, чтобы это соответствовало среде Win32.

0

Другие решения


По вопросам рекламы [email protected]