COM インターフェイスをテストする小さな c# アプリケーションを作成しようとしています (これも c# で作成されています)。インターフェイスには、単一の文字列をパラメーターとして受け入れるメソッドが含まれています。
以下にいくつかのコードサンプルを含めました。以下を使用して呼び出しを実行します。
public class CreateObject
{
private Type comType;
public object comObject;
public CreateObject(string ProgID)
{
comType = Type.GetTypeFromProgID(ProgID);
comObject = Activator.CreateInstance(comType);
}
public void Execute(string Method, params object[] Parameters)
{
comType.InvokeMember(Method, BindingFlags.InvokeMethod, null, comObject, Parameters);
}
}
次に、次を使用して実行します。
String sParam = "test";
CreateObject obj = new CreateObject("Namespace.Class");
obj.Execute("Method", sParam );
COM 内では、インターフェイスは次のようになります。
[InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("xxxxxx-xxxx-xxxx-xxxx-xxxxxx")]
public interface Interface
{
void Method(String sParam);
}
Method(String) の単純化された実装:
[ClassInterface(ClassInterfaceType.None), Guid("xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"), ProgId("Namespace.Class")]
public class Class: Interface
{
public void Method(String sParam)
{
XmlDocument xml = new XmlDocument();
xml.LoadXml(sParam);
XmlWriter writer = XmlWriter.Create("result.xml");
*** other code used to create the xml ***
}
}
エラーは返されませんが、COM は実際には実行されていないようです。ただし、テスト アプリと COM の両方から文字列パラメーターを取得すると、正しい出力が得られます (COM インターフェイスはディスク上に XML ファイルを作成します)。パラメータの使用に誤りがあることは誰にもわかりますか?