2009-02-16 3 views
3

J'ai créé une bibliothèque de classe .NET en C# et l'ai exposée à COM. Cela fonctionne bien comme un serveur COM in-proc. Cependant, je veux l'utiliser comme un serveur COM externe pour l'avoir dans un processus séparé. Pour ce faire, j'essaye de créer une application COM +. Pour cela, j'essaye de créer une application COM +. J'ai créé une application COM + vide et ajouté les classes implémentées dans la bibliothèque de classes. Lorsque j'appelle CoCreateInstance() pour instancier une classe implémentée dans la bibliothèque, le processus de substitution COM + rencontre une violation d'accès et se termine (crash dump suit).Utilisation d'une bibliothèque de classes C# en tant qu'application serveur COM +

Existe-t-il des étapes spéciales à prendre pour créer une bibliothèque de classes pouvant être utilisée comme serveur COM externe sous COM +?

COM + plantages processus de substitution avec le vidage sur incident suivant:

Exception: C0000005
Adresse: 0x000C1618

Call Stack:
! + 0xC1618
mscorwks! Ordinal79 + 0xE41C
mscorwks! Ordinal79 + 0xE4AD
mscorwks! CoInitializeEE + 0x563F
mscorwks! CoInitializeEE + 0x5672
mscorwks! CoInitializeEE + 0x57F1
mscorwks! CoInitializeCor + 0x210E
mscorwks! CoInitializeCor + 0x48D
mscorwks! Ordinal79 + 0x16D2
mscorwks! ReleaseFusionInterfaces + 0x20B28
COMSVCS! + 0xC29A2
COMSVCS! + 0xC2BDA
COMSVCS! CoCreateStdTrustable + 0xCB10
ole32! CoMarshalInterface + 0x2642
ole32! CoInstall + 0x673
ole32! CoQueryAuthenticationServices + 0x1F44
ole32! CoQueryAuthenticationServices + 0x2862
ole32! CoWaitForMultipleHandles + 0xC267
ole32! CoQueryClientBlanket + 0x16CE
ole32! CoCreateObjectInContext + 0xC8E
ole32! CoInstall + 0x87A
ole32! CoWaitForMultipleHandles + 0x10479
ole32! CoMarshalInterface + 0x2808
ole32! CoGetTreatAsClass + 0xBE7
ole32! CoGetTreatAsClass + 0xB9E
ole32! CoMarshalInterface + 0x28F2
ole32! CoMarshalInterface + 0x2642
COMSVCS! CoCreateStdTrustable + 0x106A4
ole32! CoMarshalInterface + 0x2642
ole32! CoPopServiceDomain + 0x14FE
rpcrt4! CheckVerificationTrailer + 0x70
rpcrt4! NdrStubCall2 + 0x215
RPCR T4! CStdStubBuffer_Invoke + 0x82
ole32! StgGetIFillLockBytesOnFile + 0xFC92
ole32! StgGetIFillLockBytesOnFile + 0xFC3C
ole32!CoRevokeClassObject + 0xA3E
ole32! CoRevokeClassObject + 0x963
ole32! StgGetIFillLockBytesOnFile + 0xF872
ole32! WdtpInterfacePointer_UserMarshal + 0x80E
ole32! StgGetIFillLockBytesOnFile + 0xF792
rpcrt4! NdrGetTypeFlags + 0x1C9
rpcrt4! NdrGetTypeFlags + 0x12E
rpcrt4! NdrGetTypeFlags + 0x5A
rpcrt4! CreateStubFromTypeInfo + 0x2D7
rpcrt4! CreateStubFromTypeInfo + 0x318
rpcrt4! NdrConformantArrayFree + 0x2CB
rpcrt4! NdrConformantArrayFree + 0x20F
rpcrt4! I_RpcBCacheFree + 0x61C
rpcrt4! I_RpcBCacheFree + 0x43E
rpcrt4! I_RpcBCacheFree + 0x604
kernel32! GetModuleFileNameA + 0x1B4

Répondre

0

Je vous suggère de jeter un coup d'oeil. Net Remoting à la place.

+1

Est-ce que cela me permettra d'utiliser la bibliothèque C# classe à partir du code C++ non géré? – sharptooth

1

va peut-être par l'exemple ServicedComponent dans cette réponse contribuera à:

Create Out-Of-Process COM in C#/.Net?

+0

Serai-je en mesure d'utiliser la même bibliothèque de classes qu'un serveur COM in-proc si j'en fais un composant pris en charge? – sharptooth

+0

Je ne suis pas sûr si vous pouvez déclarer le type d'activation à l'exécution. Vous voudrez regarder à travers ceci: http://msdn.microsoft.com/en-us/library/wtk4bdsx(VS.80).aspx et ceci: http://msdn.microsoft.com/en-us/library /afha61xz(VS.80).aspx. – dar

Questions connexes