СОМ
От: Kreont Эстония  
Дата: 10.04.02 14:47
Оценка:
#include "msxml2.h"
#import "msxml4.dll"
using namespace MSXML2;
#include "initguid.h"


int main(int argc, char* argv[])
{
    CoInitialize( NULL );
   IClassFactory* pCF;
   char szProgID[128] = "Msxml2.DOMDocument.4.0";
   WCHAR szWideProgID[128];
   CLSID clsid;
   long lLen = MultiByteToWideChar( CP_ACP, 0, szProgID, strlen(szProgID), szWideProgID, sizeof(szWideProgID));

   HRESULT hr = CLSIDFromProgID(szWideProgID, &clsid);

вот тут clsid = 0 i hr = -214BLAH..
а MS XML parser 4 с таким progid как я указал в программе проинстален.
Чё делать ?
   hr = CoGetClassObject( clsid,
   CLSCTX_INPROC, NULL,
   IID_IClassFactory, (void**) &pCF ) ;

   IUnknown* pUnk;
   hr = pCF->CreateInstance( NULL, IID_IUnknown, (void**) &pUnk );

   pCF->Release() ;
   CoUninitialize();
   return 0;
}
The life will soon come to end...
Re: СОМ
От: Lexey Россия  
Дата: 10.04.02 14:58
Оценка:
Здравствуйте Kreont, Вы писали:


Мда, изврат какой-то жуткий.

K>#include "msxml2.h"
[/code]
Зачем это при наличии #import?
[code]
K>#import "msxml4.dll"
K>using namespace MSXML2;
K>#include "initguid.h"
[/code]
Этот инклюд ставят перед #include <msxml2.h>. Тут он уже абсолютно бесполезен.

[code]
K>int main(int argc, char* argv[])
K>{
K>    CoInitialize( NULL );
K>   IClassFactory* pCF;
K>   char szProgID[128] = "Msxml2.DOMDocument.4.0";
K>   WCHAR szWideProgID[128];
K>   CLSID clsid;
K>   long lLen = MultiByteToWideChar( CP_ACP, 0, szProgID, strlen(szProgID), szWideProgID, sizeof(szWideProgID));

K>   HRESULT hr = CLSIDFromProgID(szWideProgID, &clsid);


Зачем такой мазохизм? Почему не:
[code]
WCHAR szWideProgID=L"Msxml2.DOMDocument.4.0";
[/ccode]

K>вот тут clsid = 0 i hr = -214BLAH..


RTFM по MultiByteToWideChar. При твоих параметрах она не нуль-терминирует выходную строку.

K>а MS XML parser 4 с таким progid как я указал в программе проинстален.

K>Чё делать ?

Ошибки править. Хотя я вообще не понимаю, зачем тебе понадобился ProgID? Чем известный CLSID не угодил?
Re[2]: СОМ
От: Kreont Эстония  
Дата: 10.04.02 16:38
Оценка:
Здравствуйте Lexey, Вы писали:

L>Здравствуйте Kreont, Вы писали:



L>Мда, изврат какой-то жуткий.


L>
K>>#include "msxml2.h"
L>[/code]
L>Зачем это при наличии #import?
L>[code]
K>>#import "msxml4.dll"
K>>using namespace MSXML2;
K>>#include "initguid.h"
L>[/code]
L>Этот инклюд ставят перед #include <msxml2.h>. Тут он уже абсолютно бесполезен.

L>[code]
K>>int main(int argc, char* argv[])
K>>{
K>>    CoInitialize( NULL );
K>>   IClassFactory* pCF;
K>>   char szProgID[128] = "Msxml2.DOMDocument.4.0";
K>>   WCHAR szWideProgID[128];
K>>   CLSID clsid;
K>>   long lLen = MultiByteToWideChar( CP_ACP, 0, szProgID, strlen(szProgID), szWideProgID, sizeof(szWideProgID));

K>>   HRESULT hr = CLSIDFromProgID(szWideProgID, &clsid);
L>


L>Зачем такой мазохизм? Почему не:

L>[code]
L>WCHAR szWideProgID=L"Msxml2.DOMDocument.4.0";
L>[/ccode]

K>>вот тут clsid = 0 i hr = -214BLAH..


L>RTFM по MultiByteToWideChar. При твоих параметрах она не нуль-терминирует выходную строку.


K>>а MS XML parser 4 с таким progid как я указал в программе проинстален.

K>>Чё делать ?

L>Ошибки править. Хотя я вообще не понимаю, зачем тебе понадобился ProgID? Чем известный CLSID не угодил?

потому что CLSID_DOMDocument40 — unknown identifier
The life will soon come to end...
Re[3]: СОМ
От: George_Seryakov Россия  
Дата: 10.04.02 17:04
Оценка:
Здравствуйте Kreont, Вы писали:

L>>
K>>>#import "msxml4.dll"
K>>>using namespace MSXML2;
K>>>#include "initguid.h"
L>>



L>>Ошибки править. Хотя я вообще не понимаю, зачем тебе понадобился ProgID? Чем известный CLSID не угодил?

K>потому что CLSID_DOMDocument40 — unknown identifier

Так и должно быть. Если #import без named_guids.

Чего сделать-то хочешь? Если объект создать, то это делается в три строки:

#import "msxml4.dll" no_namespace // 1

int main(int argc, char* argv[])
{
    CoInitialize( NULL ); // 2
    {
       IXMLDOMDocumentPtr dom(__uuidof(XMLDOMDocument)); // 3
    }
    CoUninitialize();
    return 0;
}


А вот в http://www.rsdn.ru/article/?vcpp/import.xml
Автор(ы): Игорь Ткачёв
Дата: 9.03.2001

В данной статье приводится объяснение работы директивы #import
компилятора Visual C++ и даны примеры её использования с
MS Word, MS Excel, ADO DB и ActiveX Control.
есть и примерчики про то как объекты создавать...
GS
Re[4]: СОМ
От: Kreont Эстония  
Дата: 10.04.02 17:33
Оценка:
Здравствуйте George_Seryakov, Вы писали:

GS>Здравствуйте Kreont, Вы писали:


L>>>
K>>>>#import "msxml4.dll"
K>>>>using namespace MSXML2;
K>>>>#include "initguid.h"
L>>>



L>>>Ошибки править. Хотя я вообще не понимаю, зачем тебе понадобился ProgID? Чем известный CLSID не угодил?

K>>потому что CLSID_DOMDocument40 — unknown identifier

GS>Так и должно быть. Если #import без named_guids.


GS>Чего сделать-то хочешь? Если объект создать, то это делается в три строки:


GS>
GS>#import "msxml4.dll" no_namespace // 1

GS>int main(int argc, char* argv[])
GS>{
GS>    CoInitialize( NULL ); // 2
GS>    {
GS>       IXMLDOMDocumentPtr dom(__uuidof(XMLDOMDocument)); // 3
GS>    }
GS>    CoUninitialize();
GS>    return 0;
GS>}
GS>


GS>А вот в http://www.rsdn.ru/article/?vcpp/import.xml
Автор(ы): Игорь Ткачёв
Дата: 9.03.2001

В данной статье приводится объяснение работы директивы #import
компилятора Visual C++ и даны примеры её использования с
MS Word, MS Excel, ADO DB и ActiveX Control.
есть и примерчики про то как объекты создавать...



Я просто хочу с COM разобраться... накатать свой компонент в DLL и клиентской аппликахой позапускать его методу...для начала))
The life will soon come to end...
Re[5]: СОМ
От: George_Seryakov Россия  
Дата: 10.04.02 18:06
Оценка:
Здравствуйте Kreont, Вы писали:

GS>>Чего сделать-то хочешь? Если объект создать, то это делается в три строки:

...
GS>>А вот в http://www.rsdn.ru/article/?vcpp/import.xml
Автор(ы): Игорь Ткачёв
Дата: 9.03.2001

В данной статье приводится объяснение работы директивы #import
компилятора Visual C++ и даны примеры её использования с
MS Word, MS Excel, ADO DB и ActiveX Control.
есть и примерчики про то как объекты создавать...


K>Я просто хочу с COM разобраться... накатать свой компонент в DLL и клиентской аппликахой позапускать его методу...для начала))


Настоятельно рекомендую для начала ATL на серверной стороне, VB/VBA/VBS на клиентской (добавляет еще одну точку зрения) и уж никак не ClassFactory и прочий низкоуровневый стафф. Все это не намного сложнее детского конструктора, и важно только ухватить генеральную идею. Заключающуюса, в частности, в том, что, чтобы лезть в потроха, стоит иметь причину, обычно все работает и так.

2All: А есть какой-нибудь стандартный текст про то, как лепить серверов на ATL и работать с ними из VC и других языков? Без углубления в детали, но с упором на то, чего можно достигнуть простейшими средствами?
GS
Re[6]: СОМ
От: Kreont Эстония  
Дата: 10.04.02 18:37
Оценка:
Здравствуйте George_Seryakov, Вы писали:

GS>Здравствуйте Kreont, Вы писали:


GS>>>Чего сделать-то хочешь? Если объект создать, то это делается в три строки:

GS>...
GS>>>А вот в http://www.rsdn.ru/article/?vcpp/import.xml
Автор(ы): Игорь Ткачёв
Дата: 9.03.2001

В данной статье приводится объяснение работы директивы #import
компилятора Visual C++ и даны примеры её использования с
MS Word, MS Excel, ADO DB и ActiveX Control.
есть и примерчики про то как объекты создавать...


K>>Я просто хочу с COM разобраться... накатать свой компонент в DLL и клиентской аппликахой позапускать его методу...для начала))


GS>Настоятельно рекомендую для начала ATL на серверной стороне, VB/VBA/VBS на клиентской (добавляет еще одну точку зрения) и уж никак не ClassFactory и прочий низкоуровневый стафф. Все это не намного сложнее детского конструктора, и важно только ухватить генеральную идею. Заключающуюса, в частности, в том, что, чтобы лезть в потроха, стоит иметь причину, обычно все работает и так.


GS>2All: А есть какой-нибудь стандартный текст про то, как лепить серверов на ATL и работать с ними из VC и других языков? Без углубления в детали, но с упором на то, чего можно достигнуть простейшими средствами?


http://rsdn.ru/article/?com/introcom.xml#IDAI3M5K
Автор(ы): Том Армстронг

В этой главе, позаимствованной из книги "ActiveX-Создание Web-приложений"
Тома Армстронга, рассматриваются основные понятия модели COM, такие как
интерфейс IUnknown, GUID, фабрики классов и т. д. Кроме того, автор приводит
примеры реализации COM-клиентов и COM-серверов с использованием языка C++,
Visual Basic и библиотеки ATL.

вот эту радость читаю.. скачал пример... версия VC не та (у меня 6) — не компилится.

Вот... а до этого я парсер xML использовал
всё вроде заработало только как я не понял хочу разобраться как всё там в COM и почему... и нафига надо..
The life will soon come to end...
Re[7]: СОМ
От: George_Seryakov Россия  
Дата: 10.04.02 18:48
Оценка:
Здравствуйте Kreont, Вы писали:

GS>>2All: А есть какой-нибудь стандартный текст про то, как лепить серверов на ATL и работать с ними из VC и других языков? Без углубления в детали, но с упором на то, чего можно достигнуть простейшими средствами?


K>http://rsdn.ru/article/?com/introcom.xml#IDAI3M5K
Автор(ы): Том Армстронг

В этой главе, позаимствованной из книги "ActiveX-Создание Web-приложений"
Тома Армстронга, рассматриваются основные понятия модели COM, такие как
интерфейс IUnknown, GUID, фабрики классов и т. д. Кроме того, автор приводит
примеры реализации COM-клиентов и COM-серверов с использованием языка C++,
Visual Basic и библиотеки ATL.


Текст достаточно полный, то есть охватывает все, что нужно для начала. К сожалению, зачем-то разбираются детали реализации. Вот это имхо лишнее для первого изучения.

K>вот эту радость читаю.. скачал пример... версия VC не та (у меня 6) — не компилится.


Создай чего-нить ATL-визардом. Оно скомпилится.

K>Вот... а до этого я парсер xML использовал

K>всё вроде заработало только как я не понял хочу разобраться как всё там в COM и почему...



K>и нафига надо..


Чтоб не заморачиваться деталями реализации.
GS
Re[8]: СОМ
От: Kreont Эстония  
Дата: 10.04.02 19:17
Оценка:
Здравствуйте George_Seryakov, Вы писали:

GS>Здравствуйте Kreont, Вы писали:


GS>>>2All: А есть какой-нибудь стандартный текст про то, как лепить серверов на ATL и работать с ними из VC и других языков? Без углубления в детали, но с упором на то, чего можно достигнуть простейшими средствами?


K>>http://rsdn.ru/article/?com/introcom.xml#IDAI3M5K
Автор(ы): Том Армстронг

В этой главе, позаимствованной из книги "ActiveX-Создание Web-приложений"
Тома Армстронга, рассматриваются основные понятия модели COM, такие как
интерфейс IUnknown, GUID, фабрики классов и т. д. Кроме того, автор приводит
примеры реализации COM-клиентов и COM-серверов с использованием языка C++,
Visual Basic и библиотеки ATL.


GS>Текст достаточно полный, то есть охватывает все, что нужно для начала. К сожалению, зачем-то разбираются детали реализации. Вот это имхо лишнее для первого изучения.


K>>вот эту радость читаю.. скачал пример... версия VC не та (у меня 6) — не компилится.


GS>Создай чего-нить ATL-визардом. Оно скомпилится.


K>>Вот... а до этого я парсер xML использовал

K>>всё вроде заработало только как я не понял хочу разобраться как всё там в COM и почему...

GS>


K>>и нафига надо..


GS>Чтоб не заморачиваться деталями реализации.


Но принцип работы всё равно надо понимать...
Вот я уже с этими dependencies замучался... хочу _com_error тип... где он объявлен ?
The life will soon come to end...
Re[9]: СОМ
От: George_Seryakov Россия  
Дата: 10.04.02 19:24
Оценка:
Здравствуйте Kreont, Вы писали:

GS>>Чтоб не заморачиваться деталями реализации.


K>Но принцип работы всё равно надо понимать...


Принцип простой: нажал на кнопочку, пусть электричество работает.

K>Вот я уже с этими dependencies замучался... хочу _com_error тип... где он объявлен ?


Это написано в 7-й строке статьи MSDN про _com_error. Крупными, жирными буквами.
GS
Re[6]: СОМ
От: retalik www.airbandits.com/
Дата: 11.04.02 05:45
Оценка:
Здравствуйте George_Seryakov, Вы писали:

GS>Настоятельно рекомендую для начала ATL на серверной стороне, VB/VBA/VBS на клиентской (добавляет еще одну точку зрения) и уж никак не ClassFactory и прочий низкоуровневый стафф. Все это не намного сложнее детского конструктора, и важно только ухватить генеральную идею. Заключающуюса, в частности, в том, что, чтобы лезть в потроха, стоит иметь причину, обычно все работает и так.



GS>2All: А есть какой-нибудь стандартный текст про то, как лепить серверов на ATL и работать с ними из VC и других языков? Без углубления в детали, но с упором на то, чего можно достигнуть простейшими средствами?

Нет. А есть желание его написать?
Успехов,
Виталий.
Re[7]: СОМ
От: George_Seryakov Россия  
Дата: 11.04.02 12:50
Оценка:
Здравствуйте retalik, Вы писали:

R>Здравствуйте George_Seryakov, Вы писали:


GS>>Настоятельно рекомендую для начала ATL на серверной стороне, VB/VBA/VBS на клиентской (добавляет еще одну точку зрения) и уж никак не ClassFactory и прочий низкоуровневый стафф. Все это не намного сложнее детского конструктора, и важно только ухватить генеральную идею. Заключающуюса, в частности, в том, что, чтобы лезть в потроха, стоит иметь причину, обычно все работает и так.

R>

GS>>2All: А есть какой-нибудь стандартный текст про то, как лепить серверов на ATL и работать с ними из VC и других языков? Без углубления в детали, но с упором на то, чего можно достигнуть простейшими средствами?


R>Нет. А есть желание его написать?


В принципе можно. Что-то вроде "Руководство ленивого по использованию и написанию COM-серверов". Но такой текст точно отсутствует? И нужен?
GS
Re[8]: СОМ
От: Аноним  
Дата: 11.04.02 18:03
Оценка:
Здравствуйте George_Seryakov, Вы писали:

GS>Здравствуйте Kreont, Вы писали:



GS>Текст достаточно полный, то есть охватывает все, что нужно для начала. К сожалению, зачем-то разбираются детали реализации. Вот это имхо лишнее для первого изучения.



Ниче не лишнее. Есть просто такие люди, которые не могут работать нормально с вещью(на проффессиональном уровне) не понимая, как она устроена. Я сам такой, и думаю таких много. И про электричество не подходящий пример — мы не собираемся приборы делать.
COM я сам примерно так и изучал, только у меня хорошая книжка была. Как поймешь, как все это устроено на низком уровне, так и с оставшимся разобраться проще, да и вообще спокойнее себя чувствуешь.
Re[9]: СОМ
От: George_Seryakov Россия  
Дата: 11.04.02 18:50
Оценка:
Здравствуйте Аноним, Вы писали:

GS>>Текст достаточно полный, то есть охватывает все, что нужно для начала. К сожалению, зачем-то разбираются детали реализации. Вот это имхо лишнее для первого изучения.


А>Ниче не лишнее. Есть просто такие люди, которые не могут работать нормально с вещью(на проффессиональном уровне) не понимая, как она устроена. Я сам такой, и думаю таких много. И про электричество не подходящий пример — мы не собираемся приборы делать.

А> COM я сам примерно так и изучал, только у меня хорошая книжка была. Как поймешь, как все это устроено на низком уровне, так и с оставшимся разобраться проще, да и вообще спокойнее себя чувствуешь.

Да я и не против понимания на уровне бинариков. Начинать надо с "Зачем?" (общая идея), потом идет "Как?" (бинарики) ну я потом уже "Что еще?"
GS
Re[8]: СОМ
От: retalik www.airbandits.com/
Дата: 12.04.02 02:21
Оценка:
Здравствуйте George_Seryakov, Вы писали:

GS>>>2All: А есть какой-нибудь стандартный текст про то, как лепить серверов на ATL и работать с ними из VC и других языков? Без углубления в детали, но с упором на то, чего можно достигнуть простейшими средствами?

R>>Нет. А есть желание его написать?
GS>В принципе можно. Что-то вроде "Руководство ленивого по использованию и написанию COM-серверов". Но такой текст точно отсутствует? И нужен?
Ну, в формате QnA точно не помешает (если судить по количеству задаваемых о CoCreateInstance вопросов).
Кроме статьи IT про #import, на русском языке, похоже, ничего нет.
Но желательно и предостеречь "особо ленивых" — например, рассказать о подлости _bstr_t при обработке больших строк
Кстати, говорят, в VC7 это дело поправлено — там alloca только для строк <64Kb вызывается, иначе — через хип.
Успехов,
Виталий.
Re[9]: СОМ
От: George_Seryakov Россия  
Дата: 12.04.02 02:38
Оценка:
Здравствуйте retalik, Вы писали:

GS>>>>2All: А есть какой-нибудь стандартный текст про то, как лепить серверов на ATL и работать с ними из VC и других языков? Без углубления в детали, но с упором на то, чего можно достигнуть простейшими средствами?

R>>>Нет. А есть желание его написать?
GS>>В принципе можно. Что-то вроде "Руководство ленивого по использованию и написанию COM-серверов". Но такой текст точно отсутствует? И нужен?

R>Ну, в формате QnA точно не помешает (если судить по количеству задаваемых о CoCreateInstance вопросов).

R>Кроме статьи IT про #import, на русском языке, похоже, ничего нет.

Формата QnA я не знаю, могу попробовать написать в обычном жанре статьи, но структурированной таким образом, чтоб можно было тыкать пальцем в разделы в ответ на часто встречающиеся вопросы.

Кто заказчик? С кем план-проспект обсуждать?
GS
Re[10]: СОМ
От: retalik www.airbandits.com/
Дата: 12.04.02 03:06
Оценка:
Здравствуйте George_Seryakov, Вы писали:
GS>Формата QnA я не знаю, могу попробовать написать в обычном жанре статьи, но структурированной таким образом, чтоб можно было тыкать пальцем в разделы в ответ на часто встречающиеся вопросы.
Да в общем-то, на RSDN так сложилось, что QnA — это короткая статья, название которой начинается на "Как" или "Почему"
GS>Кто заказчик? С кем план-проспект обсуждать?
The RSDN Group. Ты же вроде в ней состоишь?
Успехов,
Виталий.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.