Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Dispatchparameter für Invokeaufruf erstellen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.06.2004, 17:39 Uhr
MeisterB



Hallo,
ich versuche mich gerade im Aufruf von COM-Servern. Ich hab es bisher geschafft von Excel ein COM-Objekt zu erstellen und die ID für die "Visible" Methode zu erhalten. Ich möchte nun eigentlich per Invoke Excel sichtbar machen doch ich habe keine Ahnung wie ich die Dispatchparameter (im Code ist die Stelle mit XXXXXXX markiert) zusammenstellen muss. Hat jemand von euch schonmal so mit COM gearbeitet und kann mir weiterhelfen?


C++:
CoInitialize(NULL);
wchar_t* pszClass=L"Excel.Application";
CLSID clsID;
IDispatch *pExcelApp;
HRESULT hResult;

hResult=CLSIDFromProgID(pszClass,&clsID);
if(hResult!=S_OK)
{
  return;
}

hResult=CoCreateInstance(clsID,NULL,CLSCTX_LOCAL_SERVER,
                            IID_IDispatch, (void **)&pExcelApp);

OLECHAR* methodName = L"Visible";

DISPID dispidCmp;

hResult = pExcelApp-> GetIDsOfNames( IID_NULL, &methodName, 1,
LOCALE_USER_DEFAULT, &dispidCmp);
if(hResult!=S_OK)
{
return;
}

hResult = pExcelApp->Invoke(dispidCmp, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPID_PROPERTYPUT,XXXXXXX, NULL, NULL, NULL);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.06.2004, 23:40 Uhr
ao

(Operator)



Zitat:
MeisterB postete
Hat jemand von euch schonmal so mit COM gearbeitet

Mit COM gearbeitet ja, aber so gottseidank noch nicht :-$
Es könnte etwa so klappen: Soweit ich weiß, will Visible() ein Bool-Argument mit dem Wert true haben. Vor dem Invoke-Aufruf folgendes machen:

C++:
VARIANT varVisible;
VariantInit (&varVisible);
varVisible.vt = VT_BOOL;
varVisible.boolVal = VARIANT_TRUE;

DISPPARAMS params = {0};
params.rgvarg = &varVisible;
params.cArgs = 1;


und dann anstelle von XXXXXXX &params einsetzen. Viel Glück!

Musst du eigentlich übers Dispatch-Interface gehen oder kannst du die Excel-Applikation auch typsicher (d.h. über IExcel oder so) programmieren? Das wär vermutlich viel einfacher.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.06.2004, 16:58 Uhr
MeisterB



Danke für die Antwort. Ich bekomme jetzt als Fehlermeldung "Unzulässige Parameteranzahl" zurück. Das mit Excel war halt die erstbeste Anwendung an der ich COM testen wollte. Was für andere Möglichkeiten gibt es denn noch außer dem Invoke-Aufruf?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.06.2004, 17:21 Uhr
ao

(Operator)


Klappt so was?

C++:
#import "excel.exe"

CoInitialize(NULL);
CLSID clsID = CLSID_Excel;
IExcel *pExcelApp;
HRESULT hResult;

hResult=CoCreateInstance(clsID,NULL,CLSCTX_LOCAL_SERVER,
                            IID_IExcel, (void **)&pExcelApp);


hResult = pExcelApp->put_Visible (VARIANT_TRUE);

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.06.2004, 08:19 Uhr
MeisterB



Der Import funktioniert nicht (could not load type library). Da ich aber ne allgemein gültige Lösung suche um COM zu nutzen kommt ein Import eh nicht in Frage. Ich möchte ne Klasse erstellen der ich dann einfach den Namen des COM-Servers/der Funktion und entsprechende Parameter übergebe und dann soll diese die entsprechenden Aufrufe für mich durchführen -> ich kann nichts extra importieren.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.06.2004, 15:10 Uhr
RHBaum




Zitat:

Da ich aber ne allgemein gültige Lösung suche um COM ...



In wieweit bist du an andere biblios gebunden ???
MFC hat ActiveX unterstuetzung ... es dispatcht dir sogar die Componenten und wrappt dir damit alle invoke aufrufe .....

ATL ist eigentlich bei com eher das mittel der Wahl, schon weil die com unterstuetzung etwas besser ausgebaut ist (Dispatch + typisierte Interface Aufrufe), dazu ist es noch viel schlanker als die MFC. Nur wirst wenn viel Oberflaeche machst, die MFC klassen missen, falls an die gewoehnt bist. Fensterklassen gibts da auch, nur ned ganz so umfangreich wie bei der mfc.
mit der WTL kann man da aber nachhelfen

Prinzipiell wuerd ich aber schon biblos einsetzen, die dir das invoken und dispatchen der COM-Schnittstellen abnehmen. Ausserdem isses performanter, die schnittstellen schon vor/bei dem compilieren zu kennen und dann die schnittstellen zur laufzeit nur noch direkt ansprechen.

Dazu musst deinem compiler natuerlich die Schnittstellen bekannt machen ...

Zitat:

#import "excel.exe"


Ist schon gar ned mal so falsch ... nur falsche datei ... :-)
Die Schnittstelleninformation, die man mittels import einbinden kann, stehen in den tlb's / olb's ... im falle von excel in der Excel9.olb z.b.

Bei der MFC kannst dir aus ner tlb/olb gleich ne fertige Wrapperklasse generieren lassen .... einfacher gehts ned.

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
09.06.2004, 09:13 Uhr
MeisterB



Das Problem ist in meinem speziellen Fall, das ich die Schnittstelleninformation nicht kenne und eigentlich bisher nur durch Trial&Error auf die Methoden, Eigenschaften und das Comservername.Application gekommen bin. Gibt es ein Tool das ermittelt wo die Schnittstelleninfos gespeichert sind?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
09.06.2004, 09:56 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich würde es mal mit dem OLE View probieren, der mit dem VC daherkommt. Jedenfalls kann man sich damit die TypeLibraries anzeigen lassen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: