Как используем из Excel (VBA):
Код: Выделить всё
Dim X1 As Long
Dim X2 As Long
Dim o3 As spsdksw.SpRecordClientW
Set o3 = CreateObject("spsdksw.SpRecordClientW")
X1 = o3.Connect(0, "", "")
Range("D2").Value = X1
o3.GetSpRecordVersion (X2)
Range("D3").Value = X2
Как используем из C#:
Код: Выделить всё
private void OpenSpRecord()
{
// get type of class SpRecordClientW
Type SpRecordClientW = Type.GetTypeFromProgID("spsdksw.SpRecordClientW");
// create instance of class SpRecordClientW
object SpRecordClientWInstance = Activator.CreateInstance(SpRecordClientW);
// array of arguments for Connect method
object[] myArgs = new object[3];
myArgs[0] = 0;
myArgs[1] = "";
myArgs[2] = "";
// call Connect method
SpRecordClientW.InvokeMember("Connect", BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public, null, SpRecordClientWInstance, myArgs);
}
public void Run()
{
OpenSpRecord();
Type SpRecordClient = Type.GetTypeFromProgID("spsdksw.SpRecordClientW");
object obj = Activator.CreateInstance(SpRecordClient);
object[] myArgs = new object[1];
myArgs[0] = 0;
// Initialize a ParameterModifier with the number of parameters
ParameterModifier pm = new ParameterModifier(1);
// Pass the 1d parameter by reference.
pm[0] = true;
// The ParameterModifier must be passed as the single element
// of an array.
ParameterModifier[] mods = { pm };
SpRecordClient.InvokeMember("GetSpRecordVersion", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public, null, obj, myArgs, mods, null, null);
MessageBox.Show(myArgs[0].ToString());
}
На этом же компьютере запускаю тест в Delphi (идет вместе с SDK 2.2) - Версия отображается корректно.
Как думаете, в чем дело?
Заранее спасибо.
UPD: Сейчас попробовал в Excel использовать метод Connected после сразу после Connect - работает!
Вот только почему же на самом деле GetSpRecordVersion выдает нуль
UPD:
Странности... В Excel заработало все!
Код: Выделить всё
Dim X1 As Long
Dim X2 As Long
Dim X3 As Long
Dim o3 As spsdksw.SpRecordClientW
Set o3 = CreateObject("spsdksw.SpRecordClientW")
X1 = o3.Connect(0, "", "")
Range("E2").Value = X1
Range("E3").Value = o3.Connected
Range("E4").Value = o3.GetLibVersion
Range("E5").Value = o3.GetSpRecordVersion(X2)
Range("E6").Value = X2
X1 = o3.Disconnect
Range("E8").Value = X1
Range("E9").Value = o3.Connected
Тему можно закрывать. Моя ошибка в двойном объявлении типа.