Registrierung Kostenlose COM, Threading-Modelle, MT.exe und *. RGS-Skripte

9

Ich habe eine Registrierung frei C ++ COM-Komponente, deren Manifest ich mit mt.exe mit VS2010 generieren. Alles funktioniert, außer dass ich nicht angeben kann, welches Threading-Modell meine Klassen verwenden. Ich habe ein kleines Repro-Projekt erstellt, dessen generierte Manifest-Datei ( RGS.dll.embed.manifest ) wie folgt lautet:

%Vor%

Der Teil, mit dem ich ein Problem habe, ist der comClass-Knoten

%Vor%

sollte ein threadingModel-Attribut haben, wie im Beispiel "Sxs and Registration Free COM activation" auf der folgenden Seite: Ссылка

Ich weiß, dass das Threading-Modell nicht in *.tlb angegeben ist, aber aus dem Kommentar von Sen Harada zu den MSDN-Dokumenten für mt.exe sollte es möglich sein, einen in einer Registrierungsskriptdatei anzugeben ( *.rgs ) Ссылка

Ich habe also die Datei *.rgs , die der ATL-Assistent erstellt hat

%Vor%

Also gebe ich die *.rgs Datei an mt.exe

%Vor%

Und sehen Sie im Build-Protokoll, dass es die Datei *.rgs erfolgreich analysiert hat

%Vor%

(speziell die Zeile "Gültige GUID !!!" ist ohne den Parameter rgs: auf mt.exe ) gegangen.

YET my RGS.dll.embed.manifest hat das Attribut threadingModel nicht.

Diese Person ist die einzige online, die ich über das Problem sprechen kann, Ссылка , und er hat nie eine Lösung gefunden und das Manifest bearbeitet, nachdem es erzeugt wurde. Weiß jemand, wie das mt.exe-Tool die RGS-Datei verwendet, um das Manifest zu erstellen, und was ich tun muss, um ein threadingModel am anderen Ende zu finden?

    
Matt 26.11.2012, 20:02
quelle

1 Antwort

5

Interessant ... es sieht so aus, als müssten einige rudimentäre ProgId-Sachen da sein, damit mt.exe glücklich ist. Insbesondere das folgende *.rgs

%Vor%

erzeugt das folgende *.embed.manifest

%Vor%

während das folgende *.rgs

%Vor%

erzeugt das folgende *.embed.manifest

%Vor%

Bearbeiten: Es scheint, dass dies funktioniert, aber es funktioniert nur für die erste Klasse in der *.rgs -Datei. Zum Beispiel das folgende *.rgs

%Vor%

Erzeugt das folgende *.embed.manifest

%Vor%

Beachten Sie, dass nur die erste CoClass ein threadingModel (oder eine ProgId für diese Angelegenheit) hat.

Bearbeiten: Erfolg! Das folgende *.rgs

%Vor%

erzeugt das folgende *.embed.manifest

%Vor%     
Matt 27.11.2012, 02:13
quelle