Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Где найти BSTR 
:(
    Опции темы
semeiskii
Дата 26.4.2008, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.4.2008

Репутация: нет
Всего: нет



Здравствуйте.

Довелось написать COM-сервер.

Есть некий метод, описанный IDL, который я должен реализовать:
Код

[
    propget
]
HRESULT XMLInfo( [out, retval] BSTR * pData );


Я его реализовал:
Код

        public HRESULT XMLInfo(BSTR* pData)
        {
            ...
            return S_OK;
        }


При компиляции ошибки:
The type or namespace name 'BSTR' could not be found (are you missing a using directive or an assembly reference?)
Pointers and fixed size buffers may only be used in an unsafe context
The type or namespace name 'HRESULT' could not be found (are you missing a using directive or an assembly reference?)

Пробовал писать так:
Код

        public HRESULT XMLInfo(System.Data.OleDb.OleDbType.BSTR* pData)
        {

Ругается:
The type name 'BSTR' does not exist in the type 'System.Data.OleDb.OleDbType'

При создании проекта выбирал Visual C#->Windows->Class Library.

Нашел в msdn что BSTR описан в OLEAuto.h, но ума не приложу как его подключить. Не include же писать?


Это сообщение отредактировал(а) semeiskii - 26.4.2008, 21:28
PM   Вверх
Rififi
Дата 26.4.2008, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: нет
Всего: 36



semeiskii, 
.NET маппит этот тип на String при указании UnmanagedType.BStr в аттрибуте MarshalAs
PM MAIL   Вверх
semeiskii
Дата 26.4.2008, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.4.2008

Репутация: нет
Всего: нет



А кто должен писать MarshalAs?
Тот кто пишет интерфейс, или тот кто его реализует.
Интерфейс у меня подключен как Reference->COM. Т.е. его исходников нет.
PM   Вверх
Rififi
Дата 26.4.2008, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: нет
Всего: 36



тот, кто пишет интерфейс.
если у тебя реализация на c#, то думаю всё должно быть проще.
по умолчанию студия генерирует интерфейсы и классы совместимыми с COM (тогда класс будет поддерживать только позднее связывание через IDispatch), для других вариантов настроить это можно через аттрибут ClassInterface/InterfaceType

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.