SDK 2.2. Возвращаются нули в VBA и C#.

Интеграция возможностей SpRecord в ваши приложения
Ответить
kost21
Сообщения: 5
Зарегистрирован: 18 ноя 2013, 19:03

SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение kost21 »

Здравствуйте. Имеем SpRecord 3.97 и SDK 2.2.

Как используем из 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
В результате получаем нули (0) в ячейках.

Как используем из 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
UPD:

Тему можно закрывать. Моя ошибка в двойном объявлении типа.
amida
Сообщения: 7
Зарегистрирован: 11 дек 2014, 14:35

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение amida »

А можно по подробней я тоже пишу на vb net и есть такаеже задача номера в exsel не поделитесь информацией как это реализовать
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение sannx »

Может вам поможет первое сообщение с примерами?
amida
Сообщения: 7
Зарегистрирован: 11 дек 2014, 14:35

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение amida »

Я извиняюсь скачал SDK как его подрубить к VB 2013 примеры вижу только для С++ а для бэйсика нет
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение sannx »

Как подрубать COM-объекты здесь не учат, т.к. это обычная практика программирования. Либо обратитесь на форум в интеренете, где научат работать с СОМ, либо к нашим форумчанам-юзерам, у которых это получилось для VB, через кнопки "PM" или "EMAIL".
PichMinsk
Сообщения: 3
Зарегистрирован: 12 дек 2014, 19:00

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение PichMinsk »

У нас есть такой модуль интеграции. Он написан на C#.
Все прекрасно возвращается.
Однако из-за сложности структур и типа данных написать такой модуль напрямую на VBA не получится.
VBA просто не поймет тип возвращаемых данных.
Для этого надо использовать обертку из C ++ или С#.
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение sannx »

Написать самому.
XXXIII

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение XXXIII »

Пишу обёртку C#,
список устройств, список каналов получил, всё просто.

Дошел до разбора сообщения и не понял чего с ним делать,
где взять значения констант? результаты функции WaitMessage
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение sannx »

Все результаты есть в Справке SDK. А если вам нужны именованные константы, а не голые цифры, то посмотрите заголовочники для Delphi или C++
XXXIII

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение XXXIII »

Нашел константы, всё нормально.

Теперь другой вопрос, точнее вопросы:
1) мне нужно получать сообщения о вызове, когда пришел АОН и сообщения о том что трубку положили.

использовать какой из классов?
SpRecordClientWClass или SpRecordChannelClientWClass

хотя пока только это
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение sannx »

Посмотрите, какие классы выдают нужные вам сообщения - такой класс и используйте.
XXXIII

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение XXXIII »

Второй вопрос
Например получил какое то сообщение, в нем начало это такая структура
PMSGHeader = ^TMSGHeader;
TMSGHeader = packed record
dwMsgSize: DWORD;
dwMsg: DWORD;
MsgTime: TDateTime;
end;
MSGHEADER = TMSGHeader;

судя по всему dwMsg как раз указатель на то какого типа сообщение прилетело, а где есть описание этих типов?
в хелпе вижу следующее
dwMsg
Код сообщения.

а кто из них кто?
XXXIII

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение XXXIII »

sannx писал(а):Посмотрите, какие классы выдают нужные вам сообщения - такой класс и используйте.
ну методом тыка это не самый быстрый путь, потому и спросил
Аватара пользователя
sannx
Администратор
Сообщения: 2306
Зарегистрирован: 02 ноя 2011, 14:00
Skype: sann-x
Контактная информация:

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение sannx »

Здесь не нужен тык. Все описано в Справке, в разделе "Сообщения SpRecord"
Гость

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение Гость »

XXXIII писал(а):Второй вопрос
Например получил какое то сообщение, в нем начало это такая структура
PMSGHeader = ^TMSGHeader;
TMSGHeader = packed record
dwMsgSize: DWORD;
dwMsg: DWORD;
MsgTime: TDateTime;
end;
MSGHEADER = TMSGHeader;

судя по всему dwMsg как раз указатель на то какого типа сообщение прилетело, а где есть описание этих типов?
в хелпе вижу следующее
dwMsg
Код сообщения.

а кто из них кто?
или по длине массива определять?
Гость

Re: SDK 2.2. Возвращаются нули в VBA и C#.

Сообщение Гость »

нашел где описаны эти константы
Ответить