Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Visual_Craft
Сообщений: n/a
#1

Строковые типы в ATL. Очень странная фича!!!, самопроизвольно BSTR -> LPCTSTR - C++

22.04.2010, 20:36. Просмотров 697. Ответов 0
Метки нет (Все метки)

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

В сервере в классе ATL метод
idl)
C++
1
[id(2), helpstring('method ATLMessageBSTR')] HRESULT ATLMessageBSTR([in] BSTR olestr);
h)
C++
1
STDMETHOD(ATLMessageBSTR)(BSTR olestr);
cpp)
C++
1
2
3
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)
C++
1
void ATLMessageBSTR(LPCTSTR olestr);
cpp)
C++
1
2
void IATLTest::ATLMessageBSTR(LPCTSTR olestr){static BYTE parms[] =VTS_BSTR;
InvokeHelper(0x2, DISPATCH_METHOD, VT_EMPTY, NULL, parms, olestr);}
Вызов метода
C++
1
2
3
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-окно, но строка не передается и не отображается, точнее неправильно передается. Попробовал передавать как указатель long *, Отображаются только первые 4 буквы. Все скомпилировано в режиме Debug (не UNICODE)

Ну ничего не понимаю. Как строковые параметры передавать? Да и указатели на структуры тоже непонятно как передавать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2010, 20:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строковые типы в ATL. Очень странная фича!!!, самопроизвольно BSTR -> LPCTSTR (C++):

Странная ошибка при компиляции очень очень большой проги ,,boomerang,, - C++
Я в общем, даже и не представляю, куда смотреть в поисках ошибки. Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ...

Строковые типы данных - C++
Ввести с клавиатуры строку из 20-ти или меньшего числа символов и найти в строке сумму и количество всех цифр. Язык С++(дано: ввод в Edit1...

Строковые типы данных. Обработка строк - C++
Помогите написать вот такую программу: Системы исчисления. Вводится строка символов. Если она является изображением целого числа...

Исправить ошибки, строковые типы данных - C++
#include "stdafx.h" #include <string.h> #include <iostream> #include <ctime> #include <conio.h> int _tmain(int argc, _TCHAR*...

Разработка приложений, использующих строковые типы данных - C++
Дан текст. Исключить из него символы, расположенные между скобками ‘(‘, ‘)’. Сами скобки тоже должны быть исключены. Предполагается, что...

очень очень странная ошибка - C++
вообщем стоит Windows 8.1 стоит visual studio 2008 возникла проблема: когда пытаюсь скомпилировать прогу - возникает 1 ошибка: ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2010, 20:36
Привет! Вот еще темы с ответами:

очень странная ошибка с++ - C++
уважаемые администраторы, я пытался это добавить в раздел для экспертов, но меня недостаточно прав( вот ссылка на видио где я показываю...

Строковые типы данных (заменить все прописные (большие) буквы латинского алфавита строчными (маленькими)) - C++
Ввести с клавиатуры строку и заменить все прописные (большие) буквы латинского алфавита строчными (маленькими). Язык С++ (дано Edit1 и...

Стоит ли в C++ Builder применять такие типы как TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR - C++ Builder
Здравствуйте. Стоит ли в C++ Builder применять такие типы как TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR и тп ? Потому что в VS++ Нет как...

Строки и строковые типы - Delphi
Дано слово. Определить сколько в нем различных букв


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru