// testCOM.cpp#import"scriptlet.tlb"void _tmain(){
CoInitialize( NULL );
ScriptletTypeLib::AutomationPtr p;
p.CreateInstance(L"coolOBJ"); // не работает
p->qd(... // естественно тоже не работает
CoUninitialize();
}
Попробуй p.CreateInstance(OLESTR("coolOBJ")); и просто p.CreateInstance("coolOBJ"); Что-то у тебя с настрйками в проекте. Или не зарегистрирован компонент. Посмотри в Реестре HKCR\coolOBJ.
просто обычно имена объектов состоят из 2х частей (библиотека/объект, компания/объект), конечно можно и без этого, но мне кажется в данном случае логично.
... << RSDN@Home 1.1 beta 2 >>
Re[2]: Создание COM на VBScript, а использование на C++?
Здравствуйте, AlexeyP10, Вы писали:
AP>Может надо создавать: AP>duan.coolOBJ
AP>Set component = CreateObject("duan.coolOBJ")
AP>просто обычно имена объектов состоят из 2х частей (библиотека/объект, компания/объект), конечно можно и без этого, но мне кажется в данном случае логично.
Я согласен.
Но что в данном случае имелось ввиду под duan. я несколько не понимаю?
Библиотека, компания ...???... А как все это на xml в vbs прописать
Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, duan, Вы писали:
Vi2>Попробуй p.CreateInstance(OLESTR("coolOBJ")); и просто p.CreateInstance("coolOBJ"); Что-то у тебя с настрйками в проекте. Или не зарегистрирован компонент. Посмотри в Реестре HKCR\coolOBJ.
Спасибо, за код об ошибке :-(
Но проблеммы это не снимает. С настройками все в порядке. А предложенные варианты не работают.
Здравствуйте, Left2, Вы писали:
D>>p.CreateInstance возвращает -2147221005, а по идее должен 0 или больше
L>Invalid ProgID.
L>Попробуй создавать по GUID L>Если не получится — значит класс у тебя не зарегистрирован
Я с COM знаком уже 2 дня, но я не понимаю что значит по GUID ;-)
<?XML version="1.0"?>
<component>
<registration>
description="My Test Component"
progid="Component.TestScript"
version="1"
classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}"
</registration>
<public>
<property name="name"/>
<method name="factorial"/>
</public>
<script language="VBScript">
<![CDATA[
Function factorial(n)
If isNumeric(n) Then
If n <= 1 Then
factorial = 1
Else
factorial = n*factorial(n-1)
End If
Else
factorial = -2 ' Error code.
End If
End Function
]]>
</script>
</component>
Вообщем вот кусок из MSDN, он точняк работает. Попробуй просто поименовать комонент как у них, мож поможет...
... << RSDN@Home 1.1 beta 2 >>
Re[4]: Создание COM на VBScript, а использование на C++?
Здравствуйте, duan, Вы писали:
AP>>Вообщем вот кусок из MSDN, он точняк работает. Попробуй просто поименовать комонент как у них, мож поможет...
D>Не работает
А у меня твой код, про который ты говоришь, что он не работает, — работает.
D>Изначально отсюда и начинал копать... А потом msdn.com, codeguru.com, codeproject.com... Наконец решил на форуме спросить, когда ничего сам не смог
Перегрузи машину. Переустанови винду. Попробуй на другой машине.
D>А пока... я ННЕЕННААВВИИЖЖУУ COM. Т.е. почему у всех заработал мой пример. И только у меня нет!!!???
А что ты хочешь от трех дней знакомства
Проблема не в самом СОМ, а в некоторых аспектах использования СОМ. Нужно ОБЯЗАТЕЛЬНО регистрировать сервер.
Вот этот код не требует регистрации компонента wsc, но требует точного указания полного имени файла. Недостаток — вызов метода "qd" не зависит от реального описания, т.е. изменение в wsc может привести к неправильной работе кода.
D>Подскажите, если не трудно а зачем довесок в виде named_guids.
named_guids для именования всех GUIDов библиотеки — в файле tlh будет такая секция. Это просто осталось в строке. В твоем примере не мешает и не помогает.
Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, duan, Вы писали:
Vi2>
D>>И у Vi2 работает. Блин. Но что то делать надо. Хотя это вопрос уже не для этого форума.
Vi2>Ты бы написал, что ты делаешь по шагам. А так неясно, что ты делаешь неправильно. Или что не делаешь.
Vi2>Потому как на vbs Vi2>Set component = CreateObject("coolOBJ") Vi2>эквивалентно Vi2>ScriptletTypeLib::AutomationPtr p(L"coolOBJ");
Я понимаю
Vi2>Если у одного клиента работает — объект создается, то у другого тоже должно. Чудес не бывает. Чем-то ситуации различаются.
М-да. Но вообще говоря, все заработало ...на другой машине. Там VC 6.0 и Win98. А у меня XP SP1 VC7. На другой ХP SP1 VC7 результат такой же — 0. На w2k sp3 (VC не стоит) я не могу даже зарегистрировать COM. Чудеса?