Сложные типы MIDL как параметры метода интерфейса - PullRequest
1 голос
/ 30 июня 2010

Я хотел бы знать, если, возможно, есть какие-то хорошие решения для обработки сложных типов, не импортируемых в IDL. Больше всего меня беспокоит использование векторных типов _m128 для симметричных инструкций, т.е. XMVECTOR. __declspec не распознается компилятором midl, поэтому об импорте типа данных __m128 не может быть и речи. Я рассмотрел использование wire_marshal для этого, но я думаю, что он должен знать о typedef типа __m128. Если есть способ, которым я могу использовать foreword_declare XMVECTOR для использования с wire_marshal, у меня нет ни малейшего представления о том, как бы я это сделал.

Я думал о том, чтобы скрыть тип, инкапсулируя его, и это уже будет тем, что я инкапсулирую типы данных для Reflection. Здесь я поиграл с несколькими идеями, включая наследование от интерфейсов COM и C ++. Ничто здесь не выглядело слишком многообещающим.

Многие люди говорили мне не использовать COM, и я, честно говоря, потратил много часов, не кодируя и просто пытаясь разобраться в этом. Моя логика продолжает видеть множество преимуществ использования COM, а альтернативы, в том числе MyCOM, выглядят просто как трудоемкие и изобилующие проблемами. Если это моя самая большая проблема с использованием COM, стоит ли продолжать вводить предисловие или решения замедляют работу этого приложения, учитывая его зависимость от графического представления и компьютерного моделирования в реальном времени? Я пытаюсь делать что-то в масштабе рендеринга ферм, облаков или чего-то в этом роде ... Я говорю громко и знаю, что я нуб, поэтому, пожалуйста, не пытаюсь произвести впечатление, просто глядя на информацию ... Я многое сделал исследования!

ТНХ, BekaD:

1 Ответ

1 голос
/ 30 июня 2010

оставляет во рту немного забавного вкуса: \

typedef XMVECTOR* PTR_XMVECTOR;

typedef struct _ARRAY_XMVECTOR {
        unsigned int size_array;
        [size_is(size_array*SIZE_OF_XMVECTOR)] PTR_XMVECTOR VECTOR_ARRAY;
    } ARRAY_XMVECTOR;

typedef [wire_marshal(MARSHAL_AS)] ARRAY_XMVECTOR MY_VECTOR_ARRAY;

Я бы отредактировал его или добавил в качестве комментария, но, вероятно, ближайший к этой теме ответ придет ... вероятно, очевидный .... извините за ответ на мой собственный вопрос: /

...