Переносимый параметр смещения адреса в IDL - PullRequest
1 голос
/ 12 ноября 2010

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

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

Для функций, ожидающих адреса, я заменю __int3264 * на void *.

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

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

1 Ответ

2 голосов
/ 02 декабря 2010

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

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

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

...