Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » COm Objekt einbinden

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 ]
000
18.08.2004, 15:10 Uhr
~verzweifelt
Gast


Hallo,

weiss einer vielleicht, wie ich ein COM-Objekt in meine Konsolenanwendung einbinden kann?

Danke.

Gruss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.08.2004, 15:13 Uhr
NotUsed



was willst du denn einbinden?

schon mal system() versucht?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.08.2004, 15:34 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


also mal davon abgesehen das ich die antwort auf deine frage nicht weiss, wird dir bestimmt auch keiner weiter antworten wenn du dein problem nicht genauer beschreibst.
wenn du dir alles aus der nase ziehen lassen willst werden wohl kaum brauchbare antworten dabei sein...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.08.2004, 16:00 Uhr
~verzweifelt
Gast


...ok, folgendes...

ich habe eine Konsolenanwendung mit einer main_Methode (logisch) und noch einigen Klassen, die ich aus einer dll in mein Projekt eingebunden. Das Einbinden dieser Dll habe ich über den Klassenassistenen des vc++6.0 vorgenommen, über Register Automatisierung.
Diese Dll stellt eine API dar, ich benutze diese Klassen, um einer Anwendung zu bedienen.

Nach dem ich die dll über den Registrierungsserver registriert habe, wollte ich in meinem Programm jetzt ein CreateDispatch auf die Registry machen und so, die Dll ansteuern (weiss jetzt nicht, ob das richtig formuliert ist, da ich noch ein ziemlicher Anfänger bin)...

Hier der Code:

C++:
//Initialisierung der Sagent GSA API
!rPConnection.CreateDispatch("SagentGSA.RpConnection.2")
}



Natürlich klappt das nicht in meinem Programm, da ich keine Automatisierung eingebunden habe...

...über den AppWizard kann ich nur die Automatisierung für eine MFC-Anwendung bzw. Dialoganwendung machen...ich hab aber nur eine Konsolenanwendung...

meine Frage ist jetzt, wie kann ich jetzt so ein IInterface in mein Programm einbinden, damit ich solche Sachen machen kann.

Davor hatte ich mal eine MFC-Anwendung gebastelt, bei der ich ne Automatisierung hatte, und so auch den Code von da oben verwenden können...

Gruss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.08.2004, 17:02 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


eigentlich müsstest du unter projekt->settings nur einstellen das er auch mfc-klassen verwenden soll
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.08.2004, 19:13 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


und du solltest schauen, was der Assi von VC bei einer automatisierungs-Dialoganwendung anlegt (in der InitInstance der WinApp), einige dieser Funktionen dort musst du auch in deiner anwendung dann aufrufen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
19.08.2004, 10:30 Uhr
~verzeifelt
Gast


Morje,


Zitat von FloSoft:

und du solltest schauen, was der Assi von VC bei einer automatisierungs-Dialoganwendung anlegt (in der InitInstance der WinApp), einige dieser Funktionen dort musst du auch in deiner anwendung dann aufrufen


hab ich schon ausprobiert, aber es haut nicht hin...hab parallel dazu eine SDI-Anwendung mit Automatisierung erstellt, jedoch konnte mir das nicht viel weiterhelfen...diese Schnittstelle bzw. die .odl-Datei...wie wird die überhaupt in dem Programm angesprochen oder wann kommt diese zum Einsatz?


Zitat von Windalf:

eigentlich müsstest du unter projekt->settings nur einstellen das er auch mfc-klassen verwenden soll



...da habe ich auch schon nachgeschaut, mein Programm verwendet auch MFC...wollte ein neues ATL-Objekt einfügen, jedoch meckert er mir das an, weil ich kein bestimmtes MFC-Projekt habe...so könnte ich auch eine Server-Schnittstelle in mein Programm aufnehmen, jedoch ist nicht drin...

Kennt vielleicht einer ein gutes Tutorial, wo die COM-Speifikation gut erklärt wird, oder wie man so ein COM-Objekt einbindet bzw. ein Container erstellt?

Gruss
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
19.08.2004, 10:33 Uhr
~verzweifelt
Gast


ach so, noch was, wenn ich den folgenden Code ausführe:


C++:
rPConnection.CreateDispatch("SagentGSA.RpConnection.2")



kommt diese Fehlermeldung:
Warning: CreateDispatch returning scode = CO_E_NOTINITIALIZED ($800401F0)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
19.08.2004, 20:31 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du musst erst CoInitialize oder wie das heißt aufrufen, das meinte ich was du nachschauen solltest in der Assi-MFC-Anwendung
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
19.08.2004, 22:56 Uhr
ao

(Operator)


Du verwechselst zwei Dinge:

1. Das was du eigentlich machen willst: eine fremde Coclass instanzieren und ihr Interface benutzen (d.h. als Client des fremden COM-Servers auftreten)
2. Das was der MFC-Assi macht: Eine Applikation mit COM-Interface versehen, damit sie von anderen Programmen fernbedient werden kann (d.h. einen Server bauen, der fremde Clients bedienen kann, also genau das Gegenstück).

Nach allem was ich weiß, müßte es für CreateDispatch eigentlich reichen, dass der Server sich registriert hat. Das ist nichts, was du in deinem Programm tun kannst, das muss das fremde Programm erledigen, z.B. bei der Installation.

Natürlich musst du noch das COM-Runtimesystem starten (mit CoInitialize oder CoInitializeEx).

Du kannst aber auch anstelle von CreateDispatch CoCreateInstance machen, da kriegst du einen strenger typisierten Interface-Pointer und kannst komfortabler drauf programmieren als auf dem Dispatch-Interface. Für CoCreateInstance müssen CLSID und IID der Coclass bekannt sein; du schaffst das, indem du in deinem Sourcecode #import "bla.dll", oder wie der Server heißt, schreibst.

COM kann man nicht mal so eben beschreiben, das Thema füllt Bücher. Es gibt aber MSDN-Hilfe und Beispiele.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


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: