![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
VisualCraft |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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) Ну ничего не понимаю. Как строковые параметры передавать ![]() |
|||
|
||||
VisualCraft |
|
|||
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 24.11.2003 Репутация: нет Всего: нет |
Да и указатели на структуры непонятно как прередавать. Пока, в качестве рабочего варианта преобразую любые указатели на структуры к long **. Но разве это карашо?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |