Вопрос

Я портирую старый 32-битный COM-сервер до 64-битной архитектуры.

Многие функции принимают буферные адреса и смещения в качестве параметров, как __int3264 и __int3264 указатели. Проблема заключается в том, что этот тип не генерируется автоматически в виде __int64 в X64, поскольку интерфейсы IDispatch - унаследованы, а __int3264 не поддерживается с интерфейсами автоматизации!

Для функций ожидаемые адреса я заменим __int3264 * в пустоту *.

Параметры смещения были помещены как __int3264 и длинные (как 32-битные в автоматизации + x64). Я не могу использовать Hyper (сопоставлен как __int64), поскольку он сломается в 32-битных системах.

Должен ли я использовать пустоту * для всех параметров смещения / адресов или есть еще один способ портировать те к COM-серверу X64?

Это было полезно?

Решение

void * разрешено только в [локальных] интерфейсах - он не может быть маршаллирован (нет способа узнать размер или семантику пустового указателя).

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

Почему бы не просто использовать __int64 и поместите 32-битное значение в значение __int64?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top