0

У меня есть проект, который мне нужен для работы на 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)" ([email protected]@[email protected]) referenced in .. 
error LNK2019: unresolved external symbol "extern "C" int __cdecl VirtualCopy(void *,void *,unsigned long,unsigned long)" ([email protected]@[email protected]) 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 (/ CLR)

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

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

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

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

+0

Я не могу сказать, но, похоже, в Windows CE это была функция режима ядра, а не функция пользовательского пространства.Вероятно, это причина, по которой у вас ее нет при создании приложений пользовательского пространства в среде Windows на рабочем столе. –

ответ

0

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

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

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

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

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

+0

Привет smbear, Спасибо за быстрый ответ, Вы правы, первоначальная заявка была использована для передачи и приема данных вниз по RS-232 последовательный порт – moonraker

+1

Тогда я думаю, вы должны использовать функции Win32 для связи через RS- 232. – smbear

+0

благодарит, что в дальнейшем копание обнаружило, что для доступа к данным на машине win32 необходим драйвер. Драйвер не понадобился на устройстве CE. – moonraker

Смежные вопросы