Я хотел бы реализовать COM-объект в C #, а также использовать его в C # (помимо C ++ и других).
Вот код библиотеки DLL, реализующей COM-объект:
namespace TestComServer {
[ComVisible(true),
Guid("565D8202-6C0F-4AAB-B0F6-49719CD13045"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
]
public interface ITestObject {
void DoSomething();
}
[
ComVisible(true),
GuidAttribute("21293767-A713-49E2-968E-7DDE0B0DAB94"),
ClassInterface(ClassInterfaceType.None)
]
public class TestObject : ITestObject {
public TestObject() {
}
public void DoSomething() {
}
}
}
Я использовал gacutil при добавлении DLL в глобальный кеш сборок.
EXE использует COM-объект следующим образом (как я успешно сделал с некоторыми COM-объектами, реализованными в C ++):
[
ComImport(),
Guid("565D8202-6C0F-4AAB-B0F6-49719CD13045"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
]
public interface ITestObject {
[PreserveSig ]
void DoSomething();
}
[ComImport, Guid("21293767-A713-49E2-968E-7DDE0B0DAB94")]
public class TestObject {
}
private void button1_Click(object sender, EventArgs e) {
object o = new TestObject();
ITestObject t = (ITestObject)o;
t.DoSomething();
}
При выполнении строки object o = new TestObject (); , я получаю InvalidCastException. Что не так с этим кодом?
Произошло необработанное исключение типа «System.InvalidCastException» в Test.exe
Дополнительная информация: Das Objekt des Typs "TestComServer.TestObject" Канн Нихт в Типе "TestObject" umgewandelt werden.