Assemblymanifeste

Ein Assemblymanifest ist eine XML-Datei, die eine parallele Assembly beschreibt. Assemblymanifeste beschreiben die Namen und Versionen von parallelen Assemblys, Dateien und Ressourcen der Assembly sowie die Abhängigkeit der Assembly von anderen parallelen Assemblys. Die korrekte Installation, Aktivierung und Ausführung von parallelen Assemblys erfordert, dass das Assemblymanifest immer eine Assembly im System begleitet.

Eine vollständige Auflistung des XML-Schemas finden Sie unter Manifestdateischema.

Assemblymanifeste verfügen über die folgenden Elemente und Attribute.

Element Attribute Erforderlich
Versammlung Ja
manifestVersion Ja
noInheritable Nein
assemblyIdentity Ja
type Ja
name Ja
language Nein
Processorarchitecture Nein
version Ja
publicKeyToken Nein
Abhängigkeit Nein
dependentAssembly Nein
datei Nein
name Ja
Hashalg Nein
hash Nein
comClass Nein
description Nein
Clsid Ja
threadingModel Nein
tlbid Nein
Progid Nein
miscStatus Nein
miscStatusIcon Nein
miscStatusContent Nein
miscStatusDocPrint Nein
miscStatusThumbnail Nein
typelib Nein
tlbid Ja
version Ja
helpdir Ja
Resourceid Nein
flags Nein
comInterfaceExternalProxyStub Nein
Iid Ja
baseInterface Nein
numMethods Nein
name Nein
tlbid Nein
proxyStubClsid32 Nein
comInterfaceProxyStub Nein
Iid Ja
name Ja
tlbid Nein
baseInterface Nein
numMethods Nein
proxyStubClsid32 Nein
threadingModel Nein
windowClass Nein
Versionierte Nein

Speicherort

Assemblymanifeste können an drei Speicherorten installiert werden:

  • Als Manifeste, die freigegebene Assemblys begleiten, sollten Assemblymanifeste als separate Datei im parallelen Assemblycache installiert werden. Dies ist in der Regel der Ordner WinSxS im Windows-Verzeichnis.
  • Als Manifeste, die private Assemblys begleiten, sollten Assemblymanifeste in der Verzeichnisstruktur der Anwendung installiert werden. Dies ist in der Regel eine separate Datei im selben Ordner wie die ausführbare Datei der Anwendung.
  • Als Ressource in einer DLL ist die Assembly für die private Verwendung der DLL verfügbar. Ein Assemblymanifest kann nicht als Ressource in eine EXE-Datei eingeschlossen werden. Eine EXE-Datei kann ein Anwendungsmanifest als Ressource enthalten.

Dateinamensyntax

Der Name eines Assemblymanifests ist ein beliebiger gültiger Dateiname gefolgt von .manifest.

Ein Assemblymanifest, das auf myassembly verweist, würde beispielsweise die folgende Dateinamensyntax verwenden: myassembly.<resource ID>.manifest. Sie können das <resource ID> Feld weglassen, wenn das Assemblymanifest als separate Datei installiert wird oder wenn die Ressourcen-ID 1 ist.

Hinweis

Aufgrund der Art und Weise, wie parallel nach privaten Assemblys gesucht wird, gelten beim Packen einer DLL als private Assembly die folgenden Benennungseinschränkungen. Eine empfohlene Möglichkeit hierfür ist das Einfügen des Assemblymanifests in der DLL als Ressource. In diesem Fall muss die Ressourcen-ID gleich 1 sein, und der Name der privaten Assembly kann dem Namen der DLL entsprechen. Wenn der Name der DLL beispielsweise Microsoft.Windows.mysample.dll ist, kann der Wert des name-Attributs, das im assemblyIdentity-Element des Manifests verwendet wird, auch Microsoft.Windows.mysample sein. Eine alternative Möglichkeit besteht darin, das Assemblymanifest in einer separaten Datei zu speichern. In diesem Fall müssen sich der Name der Assembly und deren Manifest vom Namen der DLL unterscheiden. Beispielsweise Microsoft.Windows.mysampleAsm, Microsoft.Windows.mysampleAsm.manifest und Microsoft.Windows.Mysample.dll. Weitere Informationen zur parallelen Suche nach privaten Assemblys finden Sie unter Assemblysuchsequenz.

Elemente

Bei Namen von Elementen und Attributen wird die Groß-/Kleinschreibung beachtet. Bei den Werten von Elementen und Attributen wird die Groß-/Kleinschreibung nicht beachtet, mit Ausnahme des Werts des Typattributes.

Versammlung

Ein Containerelement. Das erste Unterelement muss ein assemblyIdentity- oder noInheritable-Element sein. Das Assemblymanifest beschreibt eindeutig die durch assemblyIdentity identifizierte parallele Assembly. Erforderlich.

Das Assemblyelement muss sich im Namespace "urn:schemas-microsoft-com:asm.v1" befinden. Untergeordnete Elemente der Assembly müssen sich ebenfalls in diesem Namespace befinden, durch Vererbung oder durch Tagging.

Das Assemblyelement verfügt über das folgende Attribut.

attribute Beschreibung
manifestVersion Das manifestVersion-Attribut muss auf 1.0 festgelegt werden.

noInheritable

Schließen Sie dieses Element in ein Assemblymanifest ein, um anzugeben, dass die Assembly die Aktivierungskontexte und ihre Objekte verwaltet. Das noInheritable-Element muss ein Unterelement eines Assemblyelements sein. Das assemblyIdentity-Element sollte nach jedem noInheritable-Element kommen. Das noInheritable-Element ist im Assemblymanifest erforderlich, wenn die Assembly von Anwendungsmanifesten verwendet wird, die das noInherit-Element enthalten. Ein noInheritable-Element in einem Anwendungsmanifest hat keine Auswirkung. Ein noInheritable-Element verfügt über keine untergeordneten Elemente.

Assemblyidentity

Beschreibt eine parallele Assembly und identifiziert sie eindeutig.

Als erstes Unterelement eines Assemblyelements beschreibt assemblyIdentity die parallele Assembly, die dieses Assemblymanifest besitzt, und identifiziert sie eindeutig. Dies wird als DEF-context assemblyIdentity des Assemblymanifests bezeichnet.

Als erstes Unterelement eines dependentAssembly-Elements beschreibt und identifiziert assemblyIdentity eindeutig eine parallele Assembly, die von der DEF-context assemblyIdentity verwendet wird. Dies wird als REF-context assemblyIdentity des Assemblymanifests bezeichnet. Die DEF-Kontextassembly erfordert, dass die REF-context-Assembly ordnungsgemäß funktioniert. Beachten Sie, dass jede REF-context assemblyIdentity genau mit einer entsprechenden DEF-kontext assemblyIdentity im eigenen Assemblymanifest der Assembly übereinstimmen muss, auf die verwiesen wird.

Dieses Element verfügt über keine Unterelemente. Das assemblyIdentity-Element weist die folgenden Attribute auf.

attribute BESCHREIBUNG
type Gibt den Assemblytyp an. Der Wert muss win32 und in Kleinbuchstaben sein. Erforderlich.
name Benennt die Assembly eindeutig. Verwenden Sie das folgende Format für den Assemblynamen: Organization.Division.Name. Beispiel: Microsoft.Windows.mysampleAsm. Erforderlich. Beachten Sie, dass im Fall einer DLL, die als private Assembly mit einer separaten Manifestdatei verpackt ist, der Name der Assembly vom Namen der DLL und des Manifests abweichen muss.
language Gibt die Sprache der Assembly an. Optional. Wenn die Assembly sprachspezifisch ist, geben Sie den DHTML-Sprachcode an. In der DEF-context assemblyIdentity eines Assemblymanifests, das für die weltweite Verwendung bestimmt ist (sprachneutral), lassen Sie das Sprachattribute aus.
Legen Sie in einem REF-Kontext assemblyIdentity eines Assemblymanifests für die weltweite Verwendung (sprachneutral) den Wert der Sprache auf "*" fest.
Processorarchitecture Gibt den Prozessor an. Die gültigen Werte sind x86 für 32-Bit-Windows und ia64 für 64-Bit-Windows. Optional.
version Gibt die Assemblyversion an. Verwenden Sie das vierteilige Versionsformat: mmmmm.nnnnnn.ooooo.ppppp. Jeder der Teile, die durch Zeiträume getrennt sind, kann 0 bis 65535 einschließlich sein. Weitere Informationen finden Sie unter Assemblyversionen. Erforderlich.
publicKeyToken Eine 16-stellige Hexadezimalzeichenfolge, die die letzten 8 Bytes des SHA-1-Hash des öffentlichen Schlüssels darstellt, unter dem die Assembly signiert ist. Der öffentliche Schlüssel, der zum Signieren des Katalogs verwendet wird, muss mindestens 2048 Bit sein. Erforderlich für freigegebene parallele Assemblys.

Abhängigkeit

Ein Containerelement, das mindestens eine dependentAssembly enthält. Das erste Unterelement muss ein dependentAssembly-Element sein. Eine Abhängigkeit weist keine Attribute auf. Optional.

Dependentassembly

Das erste Unterelement muss ein assemblyIdentity-Element sein, das eine parallele Assembly beschreibt und eindeutig identifiziert, die von der parallelen Assembly verwendet wird, die dieses Assemblymanifest besitzt. Jede dependentAssembly muss sich innerhalb genau einer Abhängigkeit befinden. Optional.

Datei

Enthält Dateien, die von einer parallelen Assembly verwendet werden. Enthält die Unterelemente comClass, typelib, windowClass, comInterfaceProxyStub . Optional.

Das file-Element verfügt über die folgenden Attribute.

attribute Beschreibung
name Name der Datei, z. B. Conctl32.dll.
Hashalg Algorithmus, der verwendet wird, um einen Hash der Datei zu erstellen. Dieser Wert sollte SHA1 sein.
hash Ein Hash der Datei, auf die anhand des Namens verwiesen wird. Eine hexadezimale Zeichenfolge der Länge abhängig vom Hashalgorithmus.

comClass

Ein Unterelement eines Dateielements . Optional.

Das comClass-Element weist die folgenden Attribute auf.

attribute BESCHREIBUNG
description Klassenname.
Clsid Die GUID, die die -Klasse eindeutig identifiziert. Erforderlich. Der Wert muss im Format einer gültigen GUID vorliegen.
threadingModel Das von prozessinternen COM-Klassen verwendete Threadingmodell. Wenn diese Eigenschaft NULL ist, wird kein Threadingmodell verwendet. Die Komponente wird im Hauptthread des Clients erstellt, und Aufrufe von anderen Threads werden an diesen Thread gemarshallt. Optional. Gültige Werte sind: "Apartment", "Free", "Both" und "Neutral".
tlbid Die GUID für die Typbibliothek dieser Komponente. Der Wert muss im Format einer GUID vorliegen. Optional.
Progid Versionsabhängiger programmgesteuerter Bezeichner, der der COM-Komponente zugeordnet ist. Das Format einer ProgID ist <vendor>.<-Komponente.><-Version>.
miscStatus Dupliziert im Assemblymanifest die informationen, die vom Registrierungsschlüssel MiscStatus bereitgestellt werden. Wenn Werte für die Attribute miscStatusIcon, miscStatusContent, miscStatusDocprint oder miscStatusThumbnail nicht gefunden werden, wird der entsprechende Standardwert in miscStatus für die fehlenden Attribute verwendet. Der Wert kann eine durch Trennzeichen getrennte Liste der Attributwerte aus der folgenden Tabelle sein. Sie können dieses Attribut verwenden, wenn die COM-Klasse eine OCX-Klasse ist, die Miscstatus-Registrierungsschlüsselwerte erfordert.
miscStatusIcon Dupliziert im Assemblymanifest die Informationen, die von DVASPECT_ICON bereitgestellt werden. Es kann ein Symbol eines Objekts bereitstellen. Der Wert kann eine durch Trennzeichen getrennte Liste der Attributwerte aus der folgenden Tabelle sein. Sie können dieses Attribut verwenden, wenn die COM-Klasse eine OCX-Klasse ist, die Miscstatus-Registrierungsschlüsselwerte erfordert.
miscStatusContent Dupliziert im Assemblymanifest die Informationen, die von DVASPECT_CONTENT bereitgestellt werden. Es kann ein Verbunddokument bereitstellen, das für einen Bildschirm oder Drucker angezeigt werden kann. Der Wert kann eine durch Trennzeichen getrennte Liste der Attributwerte aus der folgenden Tabelle sein. Sie können dieses Attribut verwenden, wenn die COM-Klasse eine OCX-Klasse ist, die Miscstatus-Registrierungsschlüsselwerte erfordert.
miscStatusDocprint Dupliziert im Assemblymanifest die Informationen, die von DVASPECT_DOCPRINT bereitgestellt werden. Es kann eine Objektdarstellung bereitstellen, die auf dem Bildschirm angezeigt werden kann, als ob sie auf einen Drucker gedruckt wäre. Der Wert kann eine durch Trennzeichen getrennte Liste der Attributwerte aus der folgenden Tabelle sein. Sie können dieses Attribut verwenden, wenn die COM-Klasse eine OCX-Klasse ist, die Miscstatus-Registrierungsschlüsselwerte erfordert.
miscStatusThumbnail Dupliziert in einem Assemblymanifest die Informationen, die von DVASPECT_THUMBNAIL bereitgestellt werden. Es kann eine Miniaturansicht eines Objekts bereitstellen, das in einem Browsertool angezeigt werden kann. Der Wert kann eine durch Trennzeichen getrennte Liste der Attributwerte aus der folgenden Tabelle sein. Sie können dieses Attribut verwenden, wenn die COM-Klasse eine OCX-Klasse ist, die Miscstatus-Registrierungsschlüsselwerte erfordert.

Das comClass-Element kann progid>...-Elemente als untergeordnete Elemente enthalten<, die die versionsabhängigen Progids auflisten.

Das folgende Beispiel zeigt ein comClass-Element , das in einem Dateielement enthalten ist.

<file name="sampleu.dll">
        <comClass description="Font Property Page"
    clsid="{0BE35200-8F91-11CE-9DE3-00AA004BB851}"
          threadingModel = "Both"
             tlbid = "{44EC0535-400F-11D0-9DCD-00A0C90391D3}"/>
        <comClass description="Color Property Page"
    clsid="{0BE35201-8F91-11CE-9DE3-00AA004BB851}" 
    progid="ABC.Registrar"/>
    </file>

Wenn ihre COM-Klasse eine OCX-Klasse ist, für die der Registrierungsunterschlüssel MiscStatus angegeben werden muss, wie ein Objekt erstellt und angezeigt werden soll, können Sie das Objekt aktivieren, indem Sie diese Informationen im Assemblymanifest duplizieren. Geben Sie die Eigenschaften des Objekts mithilfe der Attribute miscStatus, miscStatusIcon, miscStatusContent, miscStatusDocprint und miscStatusThumbnail des comClass-Elements an. Legen Sie diese Attribute auf eine durch Trennzeichen getrennte Liste von Attributwerten aus der folgenden Tabelle fest. Diese Attribute duplizieren die Informationen, die von einer DVASPECT-Enumeration bereitgestellt würden. Wenn für miscStatusIcon, miscStatusContent, miscStatusDocprint oder miscStatusThumbnail kein Wert gefunden wird, werden die in miscStatus angegebenen Standardwerte verwendet. Verwenden Sie Attributwerte aus der folgenden Tabelle. Diese entsprechen den Bitflags einer OLEMISC-Enumeration .

Attributwert OLEMISC-Konstante
recomposeonresize OLEMISC_RECOMPOSEONRESIZE
onlyiconic OLEMISC_ONLYICONIC
insertnotreplace OLEMISC_INSERTNOTREPLACE
static OLEMISC_STATIC
cantlinkinside OLEMISC_CANTLINKINSIDE
canlinkbyole1 OLEMISC_CANLINKBYOLE1
islinkobject OLEMISC_ISLINKOBJECT
insideout OLEMISC_INSIDEOUT
activatewhenvisible OLEMISC_ACTIVATEWHENVISIBLE
renderingisdeviceindependent OLEMISC_RENDERINGISDEVICEINDEPENDENT
invisibleatruntime OLEMISC_INVISIBLEATRUNTIME
alwaysrun OLEMISC_ALWAYSRUN
actslikebutton OLEMISC_ACTSLIKEBUTTON
actslikelabel OLEMISC_ACTSLIKELABEL
nouiactivate OLEMISC_NOUIACTIVATE
Justierbar OLEMISC_ALIGNABLE
simpleframe OLEMISC_SIMPLEFRAME
setclientsitefirst OLEMISC_SETCLIENTSITEFIRST
Imemode TOLEMISC_IMEMODE
ignoreativatewhenvisible OLEMISC_IGNOREACTIVATEWHENVISIBLE
wantstomenumerge OLEMISC_WANTSTOMENUMERGE
supportsmultilevelundo OLEMISC_SUPPORTSMULTILEVELUNDO

Typelib

Ein Unterelement eines Dateielements . Optional.

Das typelib-Element enthält die Attribute, die in der folgenden Tabelle aufgeführt sind.

attribute Beschreibung
tlbid Die eindeutige ID der Typbibliothek. Erforderlich.
version Die zweiteilige Versionsnummer der Typbibliothek. Wenn nur die Nebenversionsnummer zunimmt, werden alle Features der vorherigen Typbibliothek auf kompatible Weise unterstützt. Wenn sich die Hauptversionsnummer ändert, muss Code, der für die Typbibliothek kompiliert wurde, neu kompiliert werden. Die Versionsnummer der Typbibliothek kann von der Versionsnummer der Anwendung abweichen. Erforderlich.
helpdir Das Verzeichnis, in dem sich die Hilfedatei für die Typen in der Typbibliothek befindet. Wenn die Anwendung Typbibliotheken für mehrere Sprachen unterstützt, verweisen die Bibliotheken möglicherweise auf verschiedene Dateinamen im Verzeichnis der Hilfedatei. Wenn kein Wert vorhanden ist, geben Sie "" an. Erforderlich.
Resourceid Die hexadezimale Zeichenfolgendarstellung des Gebietsschemabezeichners (Locale Identifier, LCID). Es handelt sich um ein bis vier Hexadezimalstellen ohne Präfix 0x und ohne führende Nullen. Die LCID kann über einen neutralen Untersprachbezeichner verfügen. Weitere Informationen finden Sie unter Gebietsschemabezeichner. Optional.
flags Die Zeichenfolgendarstellung der Flags der Typbibliothek für diese Typbibliothek. Genauer gesagt: Es sollte sich um „RESTRICTED“, „CONTROL“, „HIDDEN“ oder „HASDISKIMAGE“ handeln. Dies sind die Werte der LIBFLAGS-Enumeration und die gleichen Flags, die im uLibFlags-Parameter der ICreateTypeLibLib::SetLibFlags-Methode angegeben sind. Optional.

Das folgende Beispiel zeigt ein typelib-Element , das in einem Dateielement enthalten ist.

<file name="sampleu.dll">
       <typelib tlbid="{44EC0535-400F-11D0-9DCD-00A0C90391D3}"
       version="1.0" helpdir=""/>
</file>

comInterfaceExternalProxyStub

ComInterfaceExternalProxyStub ist ein Unterelement eines Assemblyelements und wird für Automatisierungsschnittstellen verwendet. Beispiel : IDispatch und die abgeleiteten Schnittstellen. Optional.

Die Standardmäßige Proxy-Stub-Implementierung ist für die meisten Automatisierungsschnittstellen geeignet, z. B. für von IDispatch abgeleitete Schnittstellen. Der Schnittstellenproxy-Stub und alle anderen externen Proxy-Stub-Schnittstellenimplementierungen müssen in comInterfaceExternalProxyStub aufgeführt werden. Das comInterfaceExternalProxyStub-Element verfügt über die in der folgenden Tabelle aufgeführten Attribute.

attribute Beschreibung
Iid Die IID der Schnittstelle, für die der Proxy deklariert wird. Erforderlich. Der Wert sollte in der Form "{iid}" vorliegen.
baseInterface Die IID der Schnittstelle, von der die durch das iid-Attribut beschriebene schnittstelle abgeleitet wird. Dieses Attribut ist optional. Der Wert sollte in der Form "{iid}" vorliegen.
numMethods Die Anzahl der von der Schnittstelle implementierten Methoden. Dieses Attribut ist optional. Der Wert sollte in der Form "n" vorliegen.
name Name der Schnittstelle, wie sie im Code angezeigt wird. Beispiel: "IViewObject". Dies sollte keine beschreibende Zeichenfolge sein. Dieses Attribut ist optional. Der Wert sollte in der Form "name" vorliegen.
tlbid Die Typbibliothek, die die Beschreibung der durch das iid-Attribut angegebenen Schnittstelle enthält. Dieses Attribut ist optional. Der Wert sollte in der Form "{tlbid}" vorliegen.
proxyStubClsid32 Ordnet eine IID einer CLSID in 32-Bit-Proxy-DLLs zu.

Das folgende Beispiel zeigt ein comInterfaceExternalProxyStub-Element .

<comInterfaceExternalProxyStub 
  name="IAxWinAmbientDispatch" 
    iid="{B6EA2051-048A-11D1-82B9-00C04FB9942E}" 
    numMethods="35" 
  baseInterface="{00000000-0000-0000-C000-000000000046}"/>

comInterfaceProxyStub

Ein Unterelement eines Dateielements . Optional.

Wenn eine Datei in der Assembly einen Proxy-Stub implementiert, muss das entsprechende Dateitag ein comInterfaceProxyStub-Unterelement mit Attributen enthalten, die mit einem comInterfaceProxyStub-Element identisch sind. Das Marshallen von Schnittstellen zwischen Prozessen und Threads funktioniert möglicherweise nicht wie erwartet, wenn Sie einige der comInterfaceProxyStub-Abhängigkeiten für Ihre Komponente weglassen.

Das comInterfaceProxyStub-Element weist die folgenden Attribute auf.

attribute Beschreibung
Iid Das. IID der Schnittstelle, für die der Proxy deklariert wird. Erforderlich. Der Wert sollte in der Form "{iid}" vorliegen.
name Name der Schnittstelle, wie sie im Code angezeigt wird. Beispiel: "IViewObject". Dies sollte keine beschreibende Zeichenfolge sein. Dieses Attribut ist optional. Der Wert sollte in der Form "name" vorliegen.
tlbid Die Typbibliothek, die die Beschreibung der durch das iid-Attribut angegebenen Schnittstelle enthält. Dieses Attribut ist optional. Der Wert sollte in der Form "{tlbid}" vorliegen.
baseInterface Die IID der Schnittstelle, von der die durch das iid-Attribut beschriebene schnittstelle abgeleitet wird. Dieses Attribut ist optional. Der Wert sollte in der Form "{iid}" vorliegen.
numMethods Die Anzahl der von der Schnittstelle implementierten Methoden. Dieses Attribut ist optional. Der Wert sollte in der Form "n" vorliegen.
proxyStubClsid32 Ordnet eine IID einer CLSID in 32-Bit-Proxy-DLLs zu.
threadingModel Das von prozessinternen COM-Klassen verwendete Threadingmodell. Wenn diese Eigenschaft NULL ist, wird kein Threadingmodell verwendet. Die Komponente wird im Hauptthread des Clients erstellt, und Aufrufe von anderen Threads werden an diesen Thread gemarshallt. Optional. Gültige Werte sind: "Apartment", "Free", "Both" und "Neutral".

Windowclass

Der Name einer Windows-Klasse, die versioniert werden soll. Das windowclass-Element weist das folgende Attribut auf.

attribute Beschreibung
Versionierte Dieses Attribut steuert, ob der in der Registrierung verwendete name der internen Fensterklasse die Version der Assembly enthält, die die Fensterklasse enthält. Der Wert dieses Attributs kann "ja" oder "nein" sein. Der Standardwert ist "ja". Der Wert "no" sollte nur verwendet werden, wenn dieselbe Fensterklasse durch eine parallele Komponente und eine entsprechende nicht parallele Komponente definiert ist und Sie diese als dieselbe Fensterklasse behandeln möchten. Beachten Sie, dass die üblichen Regeln für die Fensterklassenregistrierung nur für die erste Komponente gelten, die die Fensterklasse registriert, kann sie registriert werden, da sie nicht versioniert ist.

Das folgende Beispiel zeigt ein windowclass-Element , das in einem Dateielement enthalten ist.

<file name="comctl32.dll">
        <windowClass versioned="no">ToolbarWindow32</windowClass>
</file>

Beispiel

Es folgt ein Beispiel für ein Assemblymanifest.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
manifestVersion="1.0">
    <assemblyIdentity type="win32" name="Microsoft.Tools.SampleAssembly" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="0000000000000000"/>
    <file name="sampleu.dll" hash="3eab067f82504bf271ed38112a4ccdf46094eb5a" hashalg="SHA1">
        <comClass description="Font Property Page" clsid="{0BE35200-8F91-11CE-9DE3-00AA004BB851}"/>
        <comClass description="Color Property Page" clsid="{0BE35201-8F91-11CE-9DE3-00AA004BB851}"/>
        <comClass description="Picture Property Page" clsid="{0BE35202-8F91-11CE-9DE3-00AA004BB851}"/>
    </file>
    <file name="bar.dll" hash="ac72753e5bb20446d88a48c8f0aaae769a962338" hashalg="SHA1"/>
    <file name="foo.dll" hash="a7312a1f6cfb46433001e0540458de60adcd5ec5" hashalg="SHA1">
        <comClass description="Registrar Class" clsid="{44EC053A-400F-11D0-9DCD-00A0C90391D3}" progid="ATL.Registrar"/>
    <comInterfaceProxyStub iid="{B6EA2051-048A-11D1-82B9-00C04FB9942E}" name=" IAxWinAmbientDispatch " tlbid="{34EC053A-400F-11D0-9DCD-00A0C90391D3}"/>
        <typelib tlbid="{44EC0535-400F-11D0-9DCD-00A0C90391D3}" version="1.0" helpdir=""/>
    </file>
    <file name="sampledll.dll" hash="ba62960ceb15073d2598379307aad84f3a73dfcb" hashalg="SHA1"/>
<windowClass>ToolbarWindow32</windowClass>
        <windowClass>ComboBoxEx32</windowClass>
        <windowClass>sample_trackbar32</windowClass>
        <windowClass>sample_updown32</windowClass>
</assembly>