Я довольно новичок в Interop / Com / ActiveX и т. Д., Так что терпите меня.
Я запаздываю привязку к серверу com / activex (не уверен, какой именно) (в основном, exe, а не dll). Я успешно использую все методы на этом сервере, кроме одного, вот описание:
VT_INT GetLastCCTError (вариант
* ERROR_STRING);
Описание : эта функция используется для получения последней сгенерированной ошибки
по CCT. Функция может быть вызвана
в любой момент, пока сервер CCT
инициализируется. Если нет ошибки
произошло, когда функция вызывается,
возвращаемый код равен «0» (ноль), и
строка ошибки будет пустой. Только
последняя ошибка, которая произошла во время
текущий прогон сервера CCT будет
быть доступным.
Ввод : Нет
Выход : функция возвращает один выходной параметр,
‘Error_string’ типа VARTYPE VT_BSTR
| VT_BYREF. Параметр содержит
строка ошибки для кода ошибки
связанный с последней функцией CCT
отказ. Возвращаемое значение: эта функция
возвращает целочисленное значение типа
VT_INT. Это код ошибки
связанный с последней функцией CCT
отказ
Я впервые попробовал использовать этот код:
this.LastErrorCode = (int)CCTType.InvokeMember("GetLastCCTError", BindingFlags.InvokeMethod, null, CCTObject, new object[] {this.LastErrorString});
Я получил следующее исключение: Исключение из HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH)
Затем, подумав, я изменил код на:
object[] Args = { "SomeString" };
this.LastErrorCode = (int)CCTType.InvokeMember("GetLastCCTError", BindingFlags.InvokeMethod, null, CCTObject, Args);
Все та же ошибка. После некоторого поиска в Google я нашел эту статью: http://www.informit.com/articles/article.aspx?p=27219&seqNum=8
Если вы посмотрите на раздел 3.3, похоже, это решение моей проблемы, и поэтому я изменил свой код на:
object[] Args = { "SomeString" };
ParameterModifier ParMod = new ParameterModifier(1);
ParMod[0] = true;
ParameterModifier[] ArrParMod = { ParMod };
this.LastErrorCode = (int)CCTType.InvokeMember("GetLastCCTError", BindingFlags.InvokeMethod, null, CCTObject, Args, ArrParMod, null, null);
this.LastErrorString = (string) Args[0];
Это все равно приводит к тому же исключению. Теперь я думаю, что проблема может быть не в передаче ссылки, а в чем-то другом. Любая помощь будет оценена.