Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Срочно нужна помощь по COM

19K
25 августа 2006 года
TwisterNew
2 / / 25.08.2006
исходные данные:

1) IDL данные импортированные из *.tlb файла:
[
uuid(9FC7F51A-8AD2-49A5-8040-21B375ABE304),
version(1.0),
helpstring("COMServer Library")

]
library COMServer
{

importlib("stdole2.tlb");

[
uuid(7F40BA29-8BD9-4851-9531-6CD4D02E2A25),
version(1.0),
helpstring("Dispatch interface for CoExternalShipment Object"),
dual,
oleautomation
]
interface ICoExternalShipment: IDispatch
{
[
id(0x00000001)
]
HRESULT _stdcall IsOrderPacked([in] BSTR _ExternalCustAccount, [in] BSTR _ExternalRequestNumber );
};

[
uuid(E4316ABB-32CB-4579-B288-F52D9A57A04A),
version(1.0),
helpstring("CoExternalShipment Object")
]
coclass CoExternalShipment
{
[default] interface ICoExternalShipment;
};

};

2) написан COMServer с использованием tlb файла

3) написан COMClient с использование tlb файла. При этом все замечательно работает т.е. из клиента вызывается удаленный меттод ISOrderPacked().

4) если же я пытаюсь создать приложение COMClient без использования еди файла а получить ссылку на интерфейс напрямую:

GUID vCoExternalShipmentGUID = Comobj::StringToGUID( "{E4316ABB-32CB-4579-B288-F52D9A57A04A}" );

_di_IUnknown vIUnknownPtr = CreateComObject( vCoExternalShipmentGUID );

void** vICoExternalShipmentPtr = NULL;
GUID vICoExternalShipmentGUID = Comobj::StringToGUID( "{7F40BA29-8BD9-4851-9531-6CD4D02E2A25}" );

HRESULT vResult = vIUnknownPtr->QueryInterface( vICoExternalShipmentGUID, vICoExternalShipmentPtr );

if ( vResult == E_INVALIDARG )
{
throw Exception( "Не правильные параметры!" );
}
else
if ( vResult == E_NOINTERFACE )
{
throw Exception( "Нет интерфейса!" );
}

Variant vICoExternalShipment = vICoExternalShipmentPtr;
vICoExternalShipment.Exec( Procedure( "IsOrderPacked" ) << "ParamValue1" << "ParamValue2" );

то срабатывает E_INVALIDARG.

При этом vIUnknownPtr инициализируется (если указать другой GUID то возникает ошибка).

А вот vICoExternalShipmentPtr так и равно NULL и возвращаемое значение HRESULT vResult = E_INVALIDARG.

Вопрос - почему?????
1.9K
25 августа 2006 года
SABROG
242 / / 26.01.2006
Как ни пытался вникнуть в COM технологию, всегда почему-то сложно, хоть и начинал с азов на ассемблере. Реально придумали хрень какую-то сложную в использовании. Самый нормальный способ - сокеты. Но это я так, извини за бессмысленное сообщение.
547
28 августа 2006 года
Hydra
488 / / 20.06.2006
Видимо интерфейс
{7F40BA29-8BD9-4851-9531-6CD4D02E2A25}
нигде не зарегистрирован и его никто не знает.
246
28 августа 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=Hydra]Видимо интерфейс
{7F40BA29-8BD9-4851-9531-6CD4D02E2A25}
нигде не зарегистрирован и его никто не знает.[/QUOTE]

[QUOTE=TwisterNew]
3) написан COMClient с использование tlb файла. При этом все замечательно работает т.е. из клиента вызывается удаленный меттод ISOrderPacked().
[/QUOTE]

?????
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог