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
Ich habe nun für die COM-Dll das folgende Manifest eingefügt:
tlbid, clsid, iid sind alle korrekt. Das Manifest ist eingebunden in der DLL im Sinne von
In meiner .NET-Applikation ist auch ein Manifest eingebunden in dem unter anderem folgender Teil drin ist:
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:
Habe ich irgendwas vergessen?
Besten Dank und Gruss
Cromon
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