Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Строковые типы в ATL. Очень странная фича!!! самопроизвольно BSTR -> LPCTSTR 
:(
    Опции темы
VisualCraft
  Дата 12.2.2004, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Работаю VC++ 6.0, Два приложения ATL сервер и MFC OLE контейнер

В сервере в классе ATL метод
idl) [id(2), helpstring("method ATLMessageBSTR")] HRESULT ATLMessageBSTR([in] BSTR olestr);
h) STDMETHOD(ATLMessageBSTR)(BSTR olestr);
cpp) STDMETHODIMP CATLTest::ATLMessageBSTR(BSTR olestr)
{char chars[256]; wcstombs((CHAR*)&chars,(OLECHAR*)&olestr,sizeof(chars));
MessageBox(0,chars,"Probe",0); return S_OK;}

В клиенте из TLB генерится следующий код
h)void ATLMessageBSTR(LPCTSTR olestr);
cpp)void IATLTest::ATLMessageBSTR(LPCTSTR olestr){static BYTE parms[] =VTS_BSTR;
InvokeHelper(0x2, DISPATCH_METHOD, VT_EMPTY, NULL, parms, olestr);}

Вызов метода
char chars[20]; strcpy(chars,"This is CHAR STR");
IATLTest atlcl; atlcl.CreateDispatch("ATLServer.ATLTest.1");
atlcl.ATLMessageBSTR(chars);

Обратите внимание был объявлен тип BSTR(т.к. другие строковые типы не компиляцца, ибо недопустимы по соглашениям ATL, см.документацию), а посылаю ему (char *) т.к. если туда сунуть что либо другое, будет ошибка компиляции.

Почему BSTR превратился в LPCTSTR?
Кто-нибудь объяснит популярно в чем философский смысл такого странного преобразования?

И ни одного предупреждения, ни ошибок.
Вызов метода работает, выскакивает вызываемое ATL-окно, но строка не передается и не отображается!!! Все скомпилировано в режиме Debug (не UNICODE)

Ну ничего не понимаю. Как строковые параметры передаватьconfused.gif
PM MAIL   Вверх
VisualCraft
Дата 12.2.2004, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да и указатели на структуры непонятно как прередавать. Пока, в качестве рабочего варианта преобразую любые указатели на структуры к long **. Но разве это карашо?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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