[C++/COM/.NET] COM-Aktivierung ohne Registrierung

Cromon

Erfahrenes Mitglied
Hallo zusammen

Momentan verzweifle ich gerade daran COM ohne Registrierung in .NET zu verwenden. Mein COM-Server funktioniert problemlos. Mein .NET-Code ist ziemlich simpel
C#:
        [STAThread]
        static void Main()
        {
            ParticleCOMLib.IStartupLoad ld = new ParticleCOMLib.StartupLoad();
            ld.AddFileArchive("MyFile.dwg");
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

Ich habe nun für die COM-Dll das folgende Manifest eingefügt:
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
		<assembly xmlns="urn:schemas-microsoft-com:asm.v1"  manifestVersion="1.0">

			<assemblyIdentity
         type="Win32"
			   name="ParticleCOM"
			   version="1.0.0.0" />
			   
			<file name = "ParticleCOM.dll">
				<comClass clsid="{74A0FA9E-3A3E-482E-8D63-C7FC957674AA}"
					threadingModel = "Apartment" />
				    
				<typelib tlbid="{1B6CFBA3-FE38-4EB7-8132-A96B4A0E9DCE}"
					   version="1.0" helpdir=""/>
			</file>

			<comInterfaceExternalProxyStub
				name="IStartupLoad"
				iid="{2FDC4406-9DB7-417B-98C0-4B5761579B2C}"
				proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
				baseInterface="{00000000-0000-0000-C000-000000000046}"
				tlbid = "{1B6CFBA3-FE38-4EB7-8132-A96B4A0E9DCE}" />
			    
		</assembly>

tlbid, clsid, iid sind alle korrekt. Das Manifest ist eingebunden in der DLL im Sinne von
Code:
/////////////////////////////////////////////////////////////////////////////
//
// RT_MANIFEST
//

"ParticleCOM.manifest"        RT_MANIFEST             "ParticleCOM.manifest"

In meiner .NET-Applikation ist auch ein Manifest eingebunden in dem unter anderem folgender Teil drin ist:
Code:
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
            type="Win32"
            name="ParticleCOM"
            version="1.0.0.0" />
    </dependentAssembly>
  </dependency>

Soweit so gut. Ist die ParticleCOM.dll nicht vorhanden kommt erwartungsgemäss der richtige Fehler beim Starten, dass die Side-by-Side-Konfiguration nicht korrekt ist. Füge ich die DLL hinzu lädt die Applikation korrekt, allerdings versucht die CLR die Klasse StartupLoad in der Regstriy zu finden und ignoriert offensichtlich, dass sie eigentlich in einer DLL als Abhängigkeit hinzugefügt wurde. Der Fehler kommt entsprechend:
Code:
Retrieving the COM class factory for component with CLSID {74A0FA9E-3A3E-482E-8D63-C7FC957674AA} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Habe ich irgendwas vergessen?

Besten Dank und Gruss
Cromon
 
Zurück