У меня есть следующий код, взаимодействующий с сервером автоматизации через динамический объект:
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
Я не уверен, что здесь не так, поскольку оба метода имеют одинаковый аргумент 0 и первый вызов работает, как и ожидалось.Эти методы определены в файле ODL следующим образом:
[id(20)] boolean About(long hWnd, long msgID);
[id(35)] boolean OpenDataFile(long hWnd, boolean bEmbed, BSTR* bsPfyFilePath );
Спасибо за помощь.