Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 进程内托管服务器的自定义COM类工厂_C#_.net_Com_Com Interop_Class Factory - Fatal编程技术网

C# 进程内托管服务器的自定义COM类工厂

C# 进程内托管服务器的自定义COM类工厂,c#,.net,com,com-interop,class-factory,C#,.net,Com,Com Interop,Class Factory,我正在研究在MkParseDisplayName/BindToObject中为托管类库实现自定义COM激活逻辑 这样,从VB创建对象可能如下所示: obj = GetObject("clsid:12341234-1234-1234-1234-123412341234:!UniqueObjectId") 对于进程外服务器(使用CoRegisterClassObject)来说,这不是问题。但是,对于in-proc服务器,我需要更改DllGetClassObject的实现,它通常由mscoree.d

我正在研究在
MkParseDisplayName/BindToObject
中为托管类库实现自定义COM激活逻辑

这样,从VB创建对象可能如下所示:

obj = GetObject("clsid:12341234-1234-1234-1234-123412341234:!UniqueObjectId")
对于进程外服务器(使用
CoRegisterClassObject
)来说,这不是问题。但是,对于in-proc服务器,我需要更改
DllGetClassObject
的实现,它通常由
mscoree.dll
提供这可能吗?


我看到的唯一其他选择是创建一个类工厂,作为类工厂并在其上实现。理论上,这样的单例还可以向
CoRegisterClassObject(CLSCTX\u INPROC\u SERVER)
注册一个自定义的
IClassFactory
类对象,但单例本身无论如何都需要先实例化。

您想在给定特定字符串的情况下创建不同的对象吗,或者只是将参数传递给新创建的对象?在后一种情况下,您可以在12341234-1234-1234-1234-1234-1234-1234123411234 guid后面的.NET类上声明并实现IParseDisplayName。@SimonMourier,原始COM DLL(它是C#中重写的候选对象)有一个实现
IParseDisplayName
的类工厂(与前面描述的完全相同),然后根据名字对象的尾随项创建不同的对象。理想情况下,我希望保持这种行为。您可以破坏默认的.NET注册表设置以指向特定的DLL,而不是MSCorei。我想了想,但我不知道如何从托管的C#DLL导出
DllGetClassObject
,不确定这是否可行。是的,这是可能的,但有点黑客(但您已经进入黑客世界:-):