COM

25/01/2009 - 09:49 von Werner Perplies | Report spam
Hi,

ich arbeite mit einer COM-Komponente von Corel Ventura 10.

Das funktioniert alles sehr gut.

Jetzt möchte ich zusàtzlich eine frühere Version (Corel Ventura 8)
einbinden.

Für beide Versionen werde Type Libraries mitgliefert, die ich als Verweis
eingebunden habe.

Die Version 10 habe ich so aufgerufen:

// nur zur Info -> [System.RuntimeType] = {Name = "__ComObject" FullName "System.__ComObject"}

Type Ventura10Type Type.GetTypeFromProgID("CorelVentura.Automation.10");
// Erzeugung des Objects, funktioniert einwandfrei
Ventura.VPAutoObjClass oVp10 = new Ventura.VPAutoObjClass();
Debugger.Break();
// nur zur Info -> Ventura8Type = {Name = "__ComObject" FullName "System.__ComObject"}

Type Ventura8Type Type.GetTypeFromProgID("CorelVentura.Automation.8");
// Erzeugung des Objects, erzeugt Fehler:
CORELVP.VPAutoObjClass oVP8 = new CORELVP.VPAutoObjClass();
Debugger.Break();

Fehlermeldung:
System.Runtime.InteropServices.COMException wurde nicht behandelt.
Message="Die COM-Klassenfactory für die Komponente mit CLSID
{D5306308-A7B4-11D1-B7D4-00A0C9067E93} konnte aufgrund des folgenden
Fehlers nicht abgerufen werden: 80040154."
Source="Vp8TestApplication"
ErrorCode=-2147221164
StackTrace:
bei Vp8TestApplication.Form1.testToolStripMenuItem_Click(Object
sender, EventArgs e) in C:\Dokumente und Einstellungen\wpa\Eigene
Dateien\Visual Studio
2008\Projects\Vp8TestApplication\Vp8TestApplication\Form1.cs:Zeile 27.
bei System.Windows.Forms.ToolStripItem.RaiseEvent(Object key,
EventArgs e)
bei System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
bei System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
bei System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs
e)
bei
System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e,
ToolStripItemEventType met)
bei System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e,
ToolStripItemEventType met)
bei System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
bei System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs
mea)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons
button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
bei System.Windows.Forms.ToolStrip.WndProc(Message& m)
bei System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
bei
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei
System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr
hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&
msg)
bei
System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32
dwComponentID, Int32 reason, Int32 pvLoopData)
bei
System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32
reason, ApplicationContext context)
bei
System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason,
ApplicationContext context)
bei System.Windows.Forms.Application.Run(Form mainForm)
bei Vp8TestApplication.Program.Main() in C:\Dokumente und
Einstellungen\wpa\Eigene Dateien\Visual Studio
2008\Projects\Vp8TestApplication\Vp8TestApplication\Program.cs:Zeile 18.
bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[]
args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence
assemblySecurity, String[] args)
bei
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
InnerException:

Ich habe keine Ahnung, wo ich suchen könnte, um das Problem zu lösen.

Mit der Ventura eigenen Scriptsprache kann ich das COM-Objekt problemlos
nutzen.

Hàtte vielleicht jemand einen Tipp für mich?

Ich wàre für jede Hilfestellung dankbar.

Werner
Regulàre Ausdrücke testen?
http://www.weepee.de/de/wps_regex/wps_regex.html
www.weepee.eu
 

Lesen sie die antworten

#1 Frank Dzaebel
25/01/2009 - 16:08 | Warnen spam
Hallo Werner,

Jetzt möchte ich zusàtzlich eine frühere Version (Corel Ventura 8)
einbinden.
Für beide Versionen werde Type Libraries mitgliefert, die ich als
Verweis eingebunden habe.
Die Version 10 habe ich so aufgerufen:
// nur zur Info -> [System.RuntimeType] = {Name = "__ComObject"
FullName = "System.__ComObject"}

Type Ventura10Type > Type.GetTypeFromProgID("CorelVentura.Automation.10");
// Erzeugung des Objects, funktioniert einwandfrei
Ventura.VPAutoObjClass oVp10 = new
Ventura.VPAutoObjClass(); Debugger.Break();



Meine Antwort ist ohne Kenntnis des Ventura Objektmodelles
gegeben und basiert auf reinem COM-Grundlagen.
Du erzeugst den Ventura10Type richtig, aber benutzt
ihn gar nicht. Ausserdem muss der Hersteller das
Vorgehen auch unterstützen (ggf. anfragen). Das geht nicht unbedingt
immer. Es kann durch PolicyAssemblies automatisch
immer auf die neuste installierte Version umgebunden werden.
Versuche sonst mal dierekt:

object oVp10 = Activator.CreateInstance(ventura10Type);
// lokale Variable CamelCase geschrieben

oder für den Typ von ventura10 das gemeinsame Interface benutzen,
von dem die beiden Typen V8/V10 abgeleitet sind.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen