我有以下代码通过动态对象与自动化服务器交互:
class Program
{
static string strProgId = "MyAutomation.Document";
static dynamic pserver = null;
static void Main(string[] args)
{
try
{
Type tPserver = Type.GetTypeFromProgID(strProgId);
if (tPserver != null)
{
pserver = Activator.CreateInstance(tPserver);
}
pserver.About(null, 0);
pserver.OpenDataFile(IntPtr.Zero, true, "Test.dat");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
if (pserver != null)
{
pserver.FileExit();
}
}
}
如您所见,它创建了自动化服务器的实例并在其上调用了两个方法。第一次呼叫按预期方式工作。第二个调用引发以下异常:
e {"Could not convert argument 0 for call to OpenDataFile."} System.Exception {System.ArgumentException} Data {System.Collections.ListDictionaryInternal} System.Collections.IDictionary> {System.Collections.ListDictionaryInternal} HResult 0x80070057 int
我不确定这是什么问题,因为这两个方法的参数都相同,并且第一个调用按预期进行。这些方法在ODL文件中定义如下:
[id(20)] boolean About(long hWnd, long msgID);
[id(35)] boolean OpenDataFile(long hWnd, boolean bEmbed, BSTR* bsPfyFilePath );
谢谢您的帮助。