.net COMVisible/ComInterop - 可以不注册就使用类型吗?
.net COMVisible/ComInterop - can you use a type without registering it?
我的第一次尝试失败了,但我希望这是可能的。如果我有这样的 class COM 注册:
[ComVisible(true)]
public interface Resolver
{
object Resolve(string type);
}
[ProgId("ClassResolver")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[Guid("53DB4409-0827-471D-94CE-2601D691D04C")]
public class Class1:Resolver
{
public object Resolve(string type)
{
return (ClassLibrary2.Interface1) new ClassLibrary2.Class1();
}
}
我可以将它用于 return ComVisible 但未注册的 Class2.Interface1(它在不同的库中):
[ComVisible(true)]
public interface Interface1
{
string SomeMethod();
}
public class Class1:Interface1
{
public string SomeMethod()
{
MessageBox.Show("SomeMethod");
return "SomeMethod";
}
}
我的第一次尝试 return 出现了错误:IUnknown:SomeMethod(没有导出方法),但我希望这样做可能有一些我不知道的技巧。
我发现,如果您将 class 标记为 ComVisible,这是可能的(仅将界面标记为 ComVisible 是不够的)。我现在可以通过 COM 使用 ClassLibrary3。见以下代码:
namespace ClassLibrary1
{
[ComVisible(true)]
public interface Resolver
{
object Resolve(string type);
}
[ProgId("ClassResolver2")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[Guid("83720331-12CB-48E1-947C-2413F7B9AB89")]
public class Class1:Resolver
{
public object Resolve(string type)
{
return new ClassLibrary3.Class1();
}
}
}
不是 "Regasm"ed 的完全独立的库:
namespace ClassLibrary3
{
[ComVisible(true)]
public class Class1
{
public string SomeMethod()
{
MessageBox.Show("ClassLibrary3.Class1.SomeMethod....");
return "ClassLibrary3.Class1.SomeMethod";
}
}
}
我的第一次尝试失败了,但我希望这是可能的。如果我有这样的 class COM 注册:
[ComVisible(true)]
public interface Resolver
{
object Resolve(string type);
}
[ProgId("ClassResolver")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[Guid("53DB4409-0827-471D-94CE-2601D691D04C")]
public class Class1:Resolver
{
public object Resolve(string type)
{
return (ClassLibrary2.Interface1) new ClassLibrary2.Class1();
}
}
我可以将它用于 return ComVisible 但未注册的 Class2.Interface1(它在不同的库中):
[ComVisible(true)]
public interface Interface1
{
string SomeMethod();
}
public class Class1:Interface1
{
public string SomeMethod()
{
MessageBox.Show("SomeMethod");
return "SomeMethod";
}
}
我的第一次尝试 return 出现了错误:IUnknown:SomeMethod(没有导出方法),但我希望这样做可能有一些我不知道的技巧。
我发现,如果您将 class 标记为 ComVisible,这是可能的(仅将界面标记为 ComVisible 是不够的)。我现在可以通过 COM 使用 ClassLibrary3。见以下代码:
namespace ClassLibrary1
{
[ComVisible(true)]
public interface Resolver
{
object Resolve(string type);
}
[ProgId("ClassResolver2")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[Guid("83720331-12CB-48E1-947C-2413F7B9AB89")]
public class Class1:Resolver
{
public object Resolve(string type)
{
return new ClassLibrary3.Class1();
}
}
}
不是 "Regasm"ed 的完全独立的库:
namespace ClassLibrary3
{
[ComVisible(true)]
public class Class1
{
public string SomeMethod()
{
MessageBox.Show("ClassLibrary3.Class1.SomeMethod....");
return "ClassLibrary3.Class1.SomeMethod";
}
}
}