Ist .net COM ruft die wiederum andere ruft .net COM-Objekt funktioniert, wenn SxS mit und Manifest-Dateien verwendet werden,

StackOverflow https://stackoverflow.com/questions/2591871

Frage

Ich habe eine .net-Anwendung Aufruf an eine COM-Komponente (C ++), die ihrerseits Anrufe an einem anderen COM-Objekt implementiert in .NET.

Diese Anwendung wird mit Hilfe der Fähigkeiten von Windows SxS und registriert nicht irgendetwas davon COM-Komponenten. Nicht der, geschrieben in C ++, und nicht das, geschrieben in .net.

Der erste Aufruf der C ++ COM-Komponente funktioniert. Aber wenn die C ++ COM-Komponente Anrufe an die .net ein, schlägt es mit Klasse nicht registriert.

Ich habe versucht, einen kleinen C ++ App mit einer Manifest-Datei erstellen, die die NET-Komponente aufruft und es funktioniert. Es scheint, dass, wenn der Fluss ist .net -> COM NATIVE -> .NET COM. Dann und SxS Pausen funktionieren nicht.

Wenn bei Fusion Logs sucht (Montag Laden Protokolle) Ich sehe, dass niemand auch nur versucht, die .NET COM Baugruppe zu lösen.

Ist das SxS Szenario soll auch an die Arbeit (ich glaube es nicht funktionieren sollte)? Wenn ja, dann was kann ich tun, falsch sein?

Dies sind die Manifest-Dateien verwende ich.

Das App-Manifest für die .net-Anwendung (als Ressource eingebettet):

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<file name="DotNetComConsumer.dll" hashalg="SHA1">
  <comClass clsid="{44E69FC9-5EAF-4D57-8C09-430F703AD82F}" tlbid="{4F81C9C3-FDDF-48F6-BC25-6F8CD458EBE6}"/>
  <typelib tlbid="{4F81C9C3-FDDF-48F6-BC25-6F8CD458EBE6}" resourceid="1" version="2.0" helpdir="" flags="HASDISKIMAGE"/>
</file>
<comInterfaceExternalProxyStub name="_Class1" iid="{5D41351A-440B-4175-9296-72D5EED83AA7}" tlbid="{4F81C9C3-FDDF-48F6-BC25-6F8CD458EBE6}"   proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"/>
<dependency>
  <dependentAssembly>
    <assemblyIdentity type="win32" name="application.sxs" version="1.0.0.0" />
  </dependentAssembly>
</dependency>
</asmv1:assembly>

application.sxs.manifest (reguläre Datei):

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" name="application.sxs" version="1.0.0.0"/>   
<dependency>
<dependentAssembly>
  <assemblyIdentity name="PerformanceMonitor" version="10.0.0.9999" publicKeyToken="792843134cf0407a" processorArchitecture="msil"/>
</dependentAssembly>
</dependency>
</assembly>

PerformanceMonitor Manifest (embeded als Ressource in PerformanceMonitor.dll zu arbeiten rund um .net com Fehler in XP):

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="PerformanceMonitor" version="10.0.0.9999" publicKeyToken="792843134cf0407a" processorArchitecture="msil"></assemblyIdentity>

<clrClass clsid="{AA614438-BC7D-400c-8837-525BFBB7253A}" progid="PerformanceMonitorFactory" threadingModel="Both" name="PerformanceMonitorFactory" runtimeVersion="v2.0.50727"></clrClass>
<file name="PerformanceMonitor.dll" hashalg="SHA1"/>
</assembly>
War es hilfreich?

Lösung

Es funktioniert, aber es gibt Dinge, die es brechen können (wie ich herausgefunden haben).

Offensichtlich wenn Ihre Anwendung ist eine WinForms-Anwendung und verwendet diese ) an sich dieser Befehl erstellt die Umleitung Prozess einen Aktivierungskontext Microsoft.Windows.Common-Kontrollen Version 6.0.0.0 zu verwenden. Und aus irgendeinem Grunde diese Pausen Nutzung der .net COM-Objekt definieren Sie in Ihnen Manifest-Datei.

Application.EnableVisualStyles aus der Anwendung entfernen und es mit dieser Abhängigkeit in der Manifest-Datei zu ersetzen scheint, den Trick zu tun:

<dependency>
   <dependentAssembly>
     <assemblyIdentity
       type="win32"
       name="Microsoft.Windows.Common-Controls"
       version="6.0.0.0"
       processorArchitecture="X86"
       publicKeyToken="6595b64144ccf1df"
       language="*"
     />
   </dependentAssembly>
</dependency>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top