Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: COM/DCOM/ActiveX/ATL/CORBA > маршалинг данных


Автор: nmn 10.10.2010, 19:23
здравствуйте

у меня есть некий com интерфейс методу которого необходимо передавать указатель на блок данных
что то вроде этого
Код

STDDMETHODIMP MyMethod([in]ULONG data_size, [in]ULONG *data);


вопрос: нужно ли что то менять чтобы маршалинг правильно работал? если не нужно, то каким образом будет определен правильный размер данных?

Автор: jonie 10.10.2010, 22:39
nmn, указанные вами типы данных не являются данными COM (родными). Т.о. ни о каком маршалинге не может быть речи. В рамках одного процесса ваши данные будут просто доступны по обычному сишному указателю несмотря ни на какие апартаменты. В рамках разных процессов (outproc сервера) ваши данные вообще доступны не будут.

Вам надо переписать ваш код используя SAFEARRAY. Читать можно начинать с http://www.roblocher.com/whitepapers/oletypes.aspx

Автор: xvr 12.10.2010, 11:42
Цитата(jonie @  10.10.2010,  22:39 Найти цитируемый пост)
nmn, указанные вами типы данных не являются данными COM (родными).
Это не так - они не являются OLE (родными) типами. 
Цитата(jonie @  10.10.2010,  22:39 Найти цитируемый пост)
Т.о. ни о каком маршалинге не может быть речи.
Если добавить в описание:
Код

STDDMETHODIMP MyMethod([in]ULONG data_size, [in, size_is(data_size)]ULONG *data);
то будет маршалить


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)