Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Bitte hilf mir mal beefy

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 < [ 2 ] [ 3 ] [ 4 ] [ 5 ]
000
06.05.2003, 16:01 Uhr
~Heiko
Gast


Ich will ein einem Exceldigramm eine Datenreihe hinzufügen bzw. verändern.

dafür will ich folgenden Befehl benutzen:
pXL ist ein Applicationpointer

C++:
pXL->ActiveChart->SeriesCollection( _variant_t((long)1) )->//hier will ich jetzt ein Membervariable von SeriesCollection ansprechen




Der Penner sagt mir allerdings immer egal was ich dahinschreibe, das das kein Member von IDispatch ist. (Müsste es aber eigenlich sein, laut doku von vba-excel)
Da du erzählt hast das du dich damit auch rumärgerst.
Kannst du mir vielleicht helfen.

Ich habe das mit Values,Interior,usw. probiert aber der frisst das einfach nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.05.2003, 16:34 Uhr
~0xdeadbeef
Gast


IDispatch hat das tatsächlich nicht, SeriesCollection schon. Du hast ein Objekt im Speicher, das die von dir geforderte Membervariable sogar hat, aber du greifst darauf über ein Interface zu, dass das nicht weiß.

Die sinnvollste Möglichkeit ist wohl, sich ein vernünftiges Interface zu holen, das vermutlich ISeriesCollection oder so ähnlich heißt. Durchsuch mal die MSDN danach. Dann musst du dir über IUnknown::QueryInterface (IDispatch ist von IUnknown abgeleitet) das vernünftige Interace holen und damit weiterarbeiten. Das sieht dann etwa so aus:

C++:
ISeriesCollection *pscMyCollection

pXL->ActiveChart->SeriesCollection(_variant_t((long l))->QueryInterface(IID_SERIESCOLLECTION, &pscMyCollection);
pscMyCollection-> //hier Member ansprechen


Der Code wird so vermutlich nicht kompilieren, du mußt noch die Header-Datei finden, in der das Interface spezifiziert ist. Außerdem kann es gut sein, dass das Interface ISeriesCollection und die Konstante IID_SERIESCOLLECTION etwas anders heißen, aber mehr kann ich im Moment nicht tun. So sollte es im Prinzip laufen.

URLs, die dazu spannend sein könnten:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/automat/htm/chap5_78v9.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/htm/cmi_q2z_7fvp.asp

Ich hoffe, das hilft dir zumindest ein bisschen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.05.2003, 17:31 Uhr
~Heiko
Gast


Hab zwar nicht alles verstanden aber ich werde mich mal damit beschäftigen und hoffe das ich das dann hinbekomme wenn nicht nerve ich dich nochmal

Unglaublich das du überhaupt wusstest was ich von dir wollte?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.05.2003, 19:53 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Bitte hilf mir nochmal

Ich habe keine Konstante gefunden die so ähnlich heisst.
Von der Logik her müsste die ja IDD_ISeriesCollection heissen (die anderen die ich gefunden heisse sind immer nach diesem Schema benannt), wenn es sie geben würde.
Ich finde einfach nichts mehr in der MSDN und google hat mir auch nicht mehr weitergeholfen.
Soll ich dir meinen Code posten?

Ach so und noch ne Frage: Wie bekomme ich den raus wer ein Member ist und wer nicht. Gibts da ne Liste zu was alles für Members möglich sind oder muss ich mir das aus der VBA-Doku rauspopeln?
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 06.05.2003 um 20:09 Uhr von Heiko editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.05.2003, 20:42 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Hi beefy,
ich bin glaub ich ein bisschen weitergekommen ich habe das jetzt mal so gemacht:


C++:
IDataObject *pscMyDataObject;
pXL->ActiveChart->SeriesCollection( _variant_t((long)1) )->QueryInterface(IID_IDataObject, (void**)&pscMyDataObject);
((ISeriesCollection*)pscMyDataObject)->Item(_variant_t((long)1))->Values = Range('Messwerte!B5','Messwerte!B5'];



Meinst du man kann das mit dem Cast machen (Fressen tuts der Compiler jedenfalls) oder ist das ganz fatal.

Wie muss ich jetzt Range benutzen, dass habe ich so dann nicht mehr hinbekommen vorher habe ich das immer so angesprochen:


C++:
pXL->Range["Messwerte!B5"]->Value2= 35.6;



das frisst der jetzt aber nicht mehr
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.05.2003, 21:44 Uhr
Christian
C/C++ Master
(Operator)


Hi!

Also casten darfst du das auf keinen, keinen, keinen Fall.
Dir bleibt wohl absolut nichts anderes übrig, als über QueryInterface(..) den Zeiger anzufordern.
Ich werd' mal mit dem OLE/COM Objektbrowser nach dem Interface suchen.

Bis dann
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.05.2003, 22:06 Uhr
Christian
C/C++ Master
(Operator)


Bin schon fündig geworden.


Es gibt ja einmal das Interface SeriesCollecton und das Interface ISeriesCollection. Die eine dürfte ein duales Interface sein, die andere ein reines Dispinterface.

Um sich bei sowas den Überblick zu verschaffen nimmst du am besten den OLE Viewer vom Visual Studio und schaust dir damit mal die Typlibrary mit der GUID:


C++:
{00020813-0000-0000-C000-000000000046}



an. Da siehst du dann in IDL notiert, den Aufbau der Schnittstelle. Wenn du die MFC verwendest, dann kannst du ja ganz leicht mit dem Klassenassi dir eine Definition in einer Wrapperklasse erstellen.
Eine andere Möglichkeit wäre es, wenn du diese Typlibrary mit dem Schlüsselwort #import in deinen Code reinpackst. Da kannst du dazu in der MSDN unter #import suchen.

Ich hoffe ich konnte helfen.

Grüße, Christian
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.05.2003, 22:36 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Is mir gar nicht klar wie du das meinst.
Die Nummer hatte ich auch schon mal gefunden. Ich weiss allerdings nicht wie die mir weiterhelfen soll.
Die beiden von dir angegebenen Interfaces sind innerhalb meines Quellcodes bereits bekannt. Ich würde also sagen das die Imports stimmen.

Meintest du das ich diese Nummer dem Queryinterface übergebn soll? wenn ja wie?

Ist diese Nummer Identisch zu der konstanten von der beefy vermutet hat das sie IID_SERIESCOLLECTION heisst?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.05.2003, 22:51 Uhr
Christian
C/C++ Master
(Operator)


Hi!

Ich habe keine Ahnung, in welchem Header die IID steht.
Eine GUID, bzw. eine IID ist ja wie folgt definiert:


C++:
typedef struct _IID
{
    unsigned long x;
    unsigned short s1;
    unsigned short s2;
    unsigned char  c[8];
} IID;


const IID IID_ISERIESCOLLECTION = {...}; // da musst du nur noch die Werte der IID angeben



Dann kannst du die IID_ISERIESCOLLECTON, die du damit definiert hast, dem Queryinterface übergeben. Sollte funktionieren.


Grüße, Christian
--
Grüße, Christian
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
07.05.2003, 10:14 Uhr
~0xdeadbeef
Gast


Wobei zu beachten ist, dass die Werte in IDL hexadezimal notiert sind, also das 0x davor nicht vergessen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ] [ 5 ]     [ 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: