Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка с вызовом метода COM объекта... Теряется параметр 
V
    Опции темы
vvvictor
Дата 19.3.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 7.3.2006

Репутация: нет
Всего: нет



Итак имеем программу sapgui. При ее вызове с пустой коммандной строкой появляется ошибка ввиде диалога SAPGUI USAGE...........
Если пустим ее например так: sapgui /H/192.168.1.1/S/3211 - все запустится нормально...............
Данная программа предоставляет COM-компонент, который прорегистрирован в системе. Дальше все происходит в VS2008.
Делаем CLR-проект, включаем этот компонент к сборке и пишем такой код:
Код
GuiConnection ^qqq = nullptr;
GuiApplication ^sss = nullptr;

sss = gcnew GuiApplication();
sss->OpenConnectionByConnectionString(L"/H/192.168.1.1/S/3211", false, false);
int i = sss->Connections->Count;
for(int j = 0; j < i; j++) {
qqq = (GuiConnection ^)sss->Connections->ElementAt(j);
if(qqq->DisabledByServer) {
MessageBox::Show("qqq"); continue;
}
int k = qqq->Sessions->Count;
for(int l = 0; l < k; l++) {
GuiComponent ^zzz;
GuiSession ^mmm = (GuiSession ^)qqq->Sessions->ElementAt(l);
zzz = mmm->FindById("/app/con[0]/ses[0]/wnd[0]/usr/txtRSYST-MANDT", false);
((GuiTextField ^)zzz)->Text = "030";
zzz = mmm->FindById("/app/con[0]/ses[0]/wnd[0]/usr/txtRSYST-BNAME", false);
((GuiTextField ^)zzz)->Text = "logonname";
zzz = mmm->FindById("/app/con[0]/ses[0]/wnd[0]/usr/pwdRSYST-BCODE", false);
((GuiPasswordField ^)zzz)->Text = "userpass";
mmm->SendCommand("fb03");
}
}
Все работает на ура.
Делаем Win32 проект и пишем такой код:
Код
#include "stdafx.h"
#include "wtypes.h"
#include "atlbase.h"

int _tmain(int argc, _TCHAR* argv[])
{
IDispatch *qqq = NULL;
HRESULT hr;
LPCOLESTR lpszProgID = OLESTR("Sapgui.ScriptingCtrl.1");
CLSID lpclsid;
DISPID dispid;
OLECHAR FAR* szMember0 = OLESTR("OpenConnectionByConnectionString");
EXCEPINFO pExcepInfo;
unsigned int puArgErr = 0;
DISPPARAMS dispparams;
VARIANT dispRes;
VARIANTARG var[3];
BSTR cmd0 = SysAllocString(L"/H/192.168.1.1/S/3211");


hr = ::CoInitializeEx(0, COINIT_MULTITHREADED);
hr = CLSIDFromProgID(lpszProgID, &lpclsid);
hr = ::CoCreateInstance(lpclsid, 0, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_IDispatch, (LPVOID *)&qqq);
hr = qqq->GetIDsOfNames(IID_NULL, &szMember0, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
var[0].vt = VT_BSTR;
var[0].bstrVal = cmd0;
var[1].vt = VT_BOOL;
var[1].boolVal = 0;
var[2].vt = VT_BOOL;
var[2].boolVal = 0;
dispparams.rgvarg = var;
dispparams.cArgs=3;
dispparams.rgdispidNamedArgs=NULL;
dispparams.cNamedArgs=0;
hr = qqq->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD | DISPATCH_PROPERTYGET , &dispparams, &dispRes, &pExcepInfo, &puArgErr);
if(qqq) { qqq->Release(); qqq = NULL; }
::CoUninitialize();
return 0;
}
И вот тут Invoke возвращает код ошибки 0x80020009 при этом выскакивает тот самый диалог SAPGUI USAGE - о котором и говорилось вначале.

Сам метод по данным OLE/COM Viewer имеет следующую декларацию:
Код

[id(0x00008096)]
GuiConnection* OpenConnectionByConnectionString(
BSTR ConnectString,
[optional] VARIANT Sync,
[optional] VARIANT Raise);


Подскажите, плиз, куда теряется параметр коммандной строки...............


PM   Вверх
vvvictor
Дата 19.3.2008, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 7.3.2006

Репутация: нет
Всего: нет



Тема закрыта......... 
Обратная передача параметров.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0683 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.