powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Для спецов вопрос по COM
5 сообщений из 5, страница 1 из 1
Для спецов вопрос по COM
    #34460104
батрак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой IDL:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[
	object,
	uuid(230CB043-8F90-48C4-82A4-72ED27165217),
	dual,
	nonextensible,
	helpstring("ICoClass Interface"),
	pointer_default(unique),
	oleautomation
]
interface ICoCopyFiles : IDispatch{
	[id( 1 ), helpstring("method MyMethod")] HRESULT MyMethod([in] BSTR bStr1 [in] BSTR bStr2, [in] SHORT Index, [out,retval] LONG* Result);
};

Я патаюсь его вызвать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
if SUCCEEDED(ppv->GetIDsOfNames(IID_NULL, &bStr,  1 , GetUserDefaultLCID(), &dispid))
			{
				VARIANTARG vVar[ 3 ];
				//DISPID __dispid[1];
				//__dispid[0] = DISPID_PROPERTYPUT;

				VariantInit(&vVar[ 0 ]);
				vVar[ 0 ].vt = VT_BSTR;
				vVar[ 0 ].bstrVal = bstrPathSc;

				VariantInit(&vVar[ 1 ]);
				vVar[ 1 ].vt = VT_BSTR;
				vVar[ 1 ].bstrVal = bstrPathDs;

				VariantInit(&vVar[ 2 ]);
				vVar[ 2 ].vt = VT_I2;
				vVar[ 2 ].iVal = - 1 ;

				VariantInit(&vResult);
				DISPPARAMS dParams = {&vVar[ 0 ], NULL,  3 ,  0 };

				EXCEPINFO excepInfo;
				memset(&excepInfo,  0 , sizeof excepInfo);
				UINT nArgErr = (UINT)- 1 ;

				SetLastError( 0 );
				hr = ppv->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dParams, &vResult, &excepInfo, &nArgErr);
				DWORD Err = GetLastError();
				if FAILED(hr)
				{	char msg[ 200 ];
					sprintf(msg, "Неудачный вызов метода.\nErrorCode = %d, HRESULT = %d", Err, long(hr));
					MessageBox(GetActiveWindow(), msg, "Ошибка", MB_OK | MB_ICONSTOP | MB_SYSTEMMODAL);
				}
			}

Всегда Е_OUTOFMEMORY почему ?
...
Рейтинг: 0 / 0
Для спецов вопрос по COM
    #34460310
батрак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка при выполнении
Код: plaintext
hr = ppv->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dParams, &vResult, &excepInfo, &nArgErr);
...
Рейтинг: 0 / 0
Для спецов вопрос по COM
    #34463049
батрак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что спецов нема...?
Кстати обычным методом(через директиву #import), все работает:

Код: plaintext
1.
2.
3.
4.
#import "здесь путь" no_namespace, named_guids
... 
ppv->MyMethod(bStr1, bStr2,  0 );
...

Но клиент должен быть, через механизм позднего связывания IDispatch::Invoke()
Как быть?
...
Рейтинг: 0 / 0
Для спецов вопрос по COM
    #34463625
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но ты вызвал не (str1, str2, 0), а (str1, str2, -1), нет?
...
Рейтинг: 0 / 0
Для спецов вопрос по COM
    #34464035
батрак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoно ты вызвал не (str1, str2, 0), а (str1, str2, -1), нет?
спасибо, что откликнулся.
Указанный тобой парметр значения не имеет вообще..
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Для спецов вопрос по COM
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]