【问题标题】:Using a C# class library as a COM+ server application将 C# 类库用作 COM+ 服务器应用程序
【发布时间】:2010-10-07 21:15:00
【问题描述】:

我在 C# 中创建了一个 .NET 类库并将其公开给 COM。它可以作为进程内 COM 服务器正常工作。但是我想将它用作一个进程外 COM 服务器,以便将它放在一个单独的进程中。

为此,我尝试创建一个 COM+ 应用程序。我创建了一个空的 COM+ 应用程序并将类库中实现的类添加到其中。当我调用 CoCreateInstance() 来实例化库中实现的类时,COM+ 代理进程遇到访问冲突并终止(崩溃转储如下)。

是否需要采取任何特殊步骤来创建可用作 COM+ 下的进程外 COM 服务器的类库?

COM+ 代理进程因以下故障转储而崩溃:

例外:C0000005
地址:0x000C1618

调用堆栈:
! + 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!CoMarshal 接口 + 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!CoMarshal 接口 + 0x2808
ole32!CoGetTreatAsClass + 0xBE7
ole32!CoGetTreatAsClass + 0xB9E
ole32!CoMarshal 接口 + 0x28F2
ole32!CoMarshal 接口 + 0x2642
COMSVCS!CoCreateStdTrustable + 0x106A4
ole32!CoMarshal 接口 + 0x2642
ole32!CoPopServiceDomain + 0x14FE
RPCRT4!CheckVerificationTrailer + 0x70
RPCRT4!NdrStubCall2 + 0x215
RPCRT4!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

【问题讨论】:

    标签: c# .net interop com-interop com+


    【解决方案1】:

    我建议您改用 .Net Remoting。

    【讨论】:

    • 这是否允许我在非托管 C++ 代码中使用 C# 类库?
    【解决方案2】:

    也许通过这个答案中的 ServicedComponent 示例会有所帮助:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-28
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多