C#で作ったdllをCOMに登録しました。(私は regasm.exe と厳密な名前 +gacutil.exe を使用しました)
これは、COM に登録したコードです。
[ComVisible(true)]
[Guid("45063BA7-237A-43B1-B799-7B000FFE7B78")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IMyCOMAPI
{
void TestMethod();
}
[Guid("41EFFD90-9D94-4884-A8CC-9567B86FB79F")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("MyCOMAPI")]
public class MyCOMAPI : IMyCOMAPI
{
public void TestMethod()
{
MessageBox.Show("COM method call");
}
}
そして、このような他のプロジェクトでCOMを使用したい
[ComVisible(true)]
[Guid("45063BA7-237A-43B1-B799-7B000FFE7B78")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IMyCOMAPI
{
void TestMethod();
}
public class Test
{
public void TestCreate()
{
Guid Class_guid = new Guid("41EFFD90-9D94-4884-A8CC-9567B86FB79F");
Type Classtype = Type.GetTypeFromCLSID(Class_guid);
object comObject = Activator.CreateInstance(Classtype);
IMyCOMAPI simple = comObject as IMyCOMAPI;
if (simple != null)
{
simple.TestMethod();
}
}
}
ただし、このコードはインターフェイスをキャストしませんでした。methodinfo を使用して呼び出すことは既に知っていますが、インターフェイスを介して使いやすくする方法を探しています。