Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите перевести с VB на С / 13 сообщений из 13, страница 1 из 1
18.05.2012, 15:28
    #37801205
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести с VB на С
В коде VB (который круче) написано:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
        .InfoMask = InfoMask_ALL
        .CIPMask = CIPMask_FAXG3 + CIPMask_FAXG4 + CIPMask_31KHZAUDIO
        If Me.ShowAllCalls Then .CIPMask = CIPMask_ALL_SERVICES
        
        .CIPMas2 = &H0
        .CallingParty = &H0
        .CallingPartySub = &H0
'где
  Public Const CIPMask_31KHZAUDIO = 2 ^ 4
  Public Const CIPMask_FAXG3 = 2 ^ 17
  Public Const CIPMask_FAXG4 = 2 ^ 18
  Public Const CIPMask_ALL_SERVICES = (2 ^ 29) - 1 - 1

  ''/* CIP masks and CIP values */

  Public Const InfoMask_CAUSE = 2 ^ 0
  Public Const InfoMask_DATETIME = 2 ^ 1
  Public Const InfoMask_DISPLAY = 2 ^ 2
  Public Const InfoMask_USERUSER = 2 ^ 3
  Public Const InfoMask_CALLPROGRESS = 2 ^ 4
  Public Const InfoMask_FACILITY = 2 ^ 5
  Public Const InfoMask_CHARGING = 2 ^ 6
  Public Const InfoMask_CALLEDPARTY = 2 ^ 7
  Public Const InfoMask_CHANNEL = 2 ^ 8
  Public Const InfoMask_EARLYB3CONNECT = 2 ^ 9      ' enabled early B3 connect using D channel
  Public Const InfoMask_ALL = 2 ^ 10 - 1 - 2 ^ 9 - 2 ^ 1 ' everything but early B3 connect and Date/Time(charged)

В коде C[++] пока написано:

Код: plaintext
1.
2.
3.
4.
5.
      message.param.listen_req.m_InfoMask = 0x414; // redirecting numbers, call progress, display info
      message.param.listen_req.m_CIPMask = 0x00010012; //Audio only
      message.param.listen_req.m_CIPMask2 = 0;
      message.AddEmpty(); // Calling party number
      message.AddEmpty(); // Calling party subaddress



(перечислением всех констант на своем языке (в *.h файлах) автор сишного кода не увлекается, а тема редкая, в google так просто не найдешь)
Надо записать параметры как в VB.
Есть слабая надежда что &H0 это 0 и AddEmpty() это тоже 0.
Главное мне правильно прописать .InfoMask и .CIPMask в сишном коде.
Сижу-с туплю-с.
Да, побираюсь, а кому счас легко.
...
Рейтинг: 0 / 0
18.05.2012, 16:22
    #37801335
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести с VB на С
> Автор: Дмитрий77
> Главное мне правильно прописать .InfoMask и .CIPMask в сишном коде.

Делаем простую проверку:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Option Explicit
'где
  Public Const CIPMask_31KHZAUDIO = 2 ^ 4
  Public Const CIPMask_FAXG3 = 2 ^ 17
  Public Const CIPMask_FAXG4 = 2 ^ 18
  Public Const CIPMask_ALL_SERVICES = (2 ^ 29) - 1 - 1

  ''/* CIP masks and CIP values */

  Public Const InfoMask_CAUSE = 2 ^ 0
  Public Const InfoMask_DATETIME = 2 ^ 1
  Public Const InfoMask_DISPLAY = 2 ^ 2
  Public Const InfoMask_USERUSER = 2 ^ 3
  Public Const InfoMask_CALLPROGRESS = 2 ^ 4
  Public Const InfoMask_FACILITY = 2 ^ 5
  Public Const InfoMask_CHARGING = 2 ^ 6
  Public Const InfoMask_CALLEDPARTY = 2 ^ 7
  Public Const InfoMask_CHANNEL = 2 ^ 8
  Public Const InfoMask_EARLYB3CONNECT = 2 ^ 9      ' enabled early B3 connect using D channel
  Public Const InfoMask_ALL = 2 ^ 10 - 1 - 2 ^ 9 - 2 ^ 1 ' everything but early B3 connect and Date/Time(charged)

Sub sc()

Debug.Print Hex(InfoMask_ALL)
Debug.Print Hex(CIPMask_FAXG3 + CIPMask_FAXG4 + CIPMask_31KHZAUDIO)
        Debug.Print Hex(CIPMask_ALL_SERVICES)

End Sub


:)

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.05.2012, 18:21
    #37801613
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести с VB на С
Игорь,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Debug.Print Hex(InfoMask_ALL)
1FD
Debug.Print Hex(CIPMask_FAXG3 + CIPMask_FAXG4 + CIPMask_31KHZAUDIO)
60010
Debug.Print Hex(CIPMask_31KHZAUDIO)
10
Debug.Print Hex(CIPMask_FAXG3 + CIPMask_31KHZAUDIO)
20010
Debug.Print Hex(CIPMask_ALL_SERVICES)
1FFFFFFE


Как-то не так, формат не тот?
Хорошо, я пошел другим путем.
1) VB6 приложение для процедуры, что я сейчас имплементирую (Send Fax, а не receive!!!),
команду LISTEN_REQ вообще не посылает, при этом факс отправляет
2) Opal (C++) при старте LISTEN_REQ посылает, но в режиме аудио-only совместимости
3) Я запустил третье приложение (кодов от которого нету, но кот. поддерживает и голос и факс, не уверен на счет G4, не суть) и в дебаге CAPI прочел следующее:
Код: plaintext
1.
LISTEN_REQ (...,Info-Mask = 0xFF250000, CIP-Mask = 0x37000304


Т.е. в явном виде константы, кот. наверно хочу.
Я забабахал в Opal
Код: vbnet
1.
2.
      message.param.listen_req.m_InfoMask = 0xff250000; // ???
      message.param.listen_req.m_CIPMask = 0x37000304; //???


Так дебаг CAPI мне нарисовал все в обратном порядке.
Код: plaintext
1.
LISTEN_REQ (...,Info-Mask = 0x000025FF, CIP-Mask = 0x04030037


Только когда я забабахал
Код: plaintext
1.
2.
      message.param.listen_req.m_InfoMask = 0x000025ff; // ???
      message.param.listen_req.m_CIPMask = 0x04030037; //???


Мне Opal в CAPI логе выдал то же что и приложение упомянутое в п.3

Самое печальное то, что проблему, которую я надеялся этим решить, я не решил.
У меня есть 2 CAPI системы для тестов (от разных производителей на 2-х компьютерах).

1)VB-код шлет факс нормально через обе из них.
2) Я скажем так успешно внедрил уже процедуру отправки факса в Opal, но
a) Opal через одну систему шлет нормально.
б) Opal через другую систему шлет весь факс быстро в куче, т.е.
последовательность
Код: vbnet
1.
2.
3.
4.
5.
CAPI_DATA_B3, CAPI_REQ  //>>>>шлем кусок файла
CAPI_DATA_B3,CAPI_CONF //<<<<получаем ответ от CAPI что кусок принят
CAPI_DATA_B3, CAPI_REQ  //>>>>шлем кусок файла
CAPI_DATA_B3,CAPI_CONF //<<<<получаем ответ от CAPI что кусок принят
...



почему-то на второй системе отрабатывает за долю секунды, факс соответственно проходит хлопком и 9 буферов данных по 2048 байт не спасают, куда больше...
Сравнивал CAPI логи, логических ошибок REQ/CONF не нашел, стал грешить на LISTEN_REQ которую не делает VB.
Мимо...обидно.
Будем разбираться дальше...
...
Рейтинг: 0 / 0
21.05.2012, 15:54
    #37804181
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести с VB на С
Игорь, за внимание спасибо
Вопрос к тем кто с C++ знаком.
Не взгляните?

Правильно ли делаю указатель на массив данных?

Но чет у меня надежды мало там ответ получить.
На Opal-овского разработчика пока тоже особо не рассчитываю, код как бы "мой".
Т.е. считываем данные в BYTE массив 2048 байт, а в функцию надо передать указатель на массив.
В VB это звучит так (оба варианта с VarPtr рабочие):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
   ' data buffers for sending and receiving
    Private Const MAX_SenderBuffers = 8
    Private Const QUEUEOUTLEN = 3
    Private SenderBuffers(MAX_SenderBuffers + 1) As Proto_DataBuffer

    Public Type Proto_DataBuffer          ' buffer for storing data from DataB3Ind and for DataB3Req
       data(MAXBDATALEN) As Byte          ' the buffer
    End Type

        With DataB3Req
...
             ' data infos:
            .DataLen = xmitLen                                      ' data length
 '           .Pointer = VarPtr(SenderBuffers(ConnectionTmp.buf_nr).data)  ' data pointer
            .Pointer = VarPtr(SenderBuffers(ConnectionTmp.buf_nr).data(0))
            .Handle = ConnectionTmp.handle_incrementer              ' data handle, ID
...


А C-шный код у меня на одной системе работает, а на другой не работает правильно, кажется не передает правильные данные, причем сравнения через всевозможные дебаги и проверки ключа к разгадке не дают.
Исходники VB в принципе могу выложить целиком, как в полном оригинальном(OCX), так и в моем усеченном варианте(только рассматриваемая процедура).
...
Рейтинг: 0 / 0
21.05.2012, 23:19
    #37804869
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести с VB на С
Дмитрий77,
сразу предупрежу, с++ не знаю.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class OpalCapiConnection : public OpalConnection
...
  protected:
...
     FILE               *m_FileName;
...
   struct Proto_DataBuffer {
      BYTE data[2048];
    };
    Proto_DataBuffer m_SenderBuffers[9];
    int                m_handle_incrementer;
    BYTE 


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void OpalCapiConnection::CAPI_SendData()
{
  int xmitLen;
  int ch;

// skipped
    for (PINDEX i = 0; i < 2048; ++i){
      ch = getc(m_FileName);
      m_SenderBuffers[m_buf_nr].data[i]= (WORD)ch;
    }
// skipped

}

Значение переменной типа int 'преобразуете' в WORD и запихиваете в массив BYTE. Ничего не смущает ?
Код: vbnet
1.
2.
ЗЫ: помню, что "на одной системе работает" ( Комп P-III(32бит естественно) )
Также помню, что на обеих машинах 32-х разрядная винда, на одной серверная, на другой - десктопная.



ЗЗЫ: вполне может быть, что моё замечание - 'бред сумасшедшего'. Если так, просьба к модератору - удалить этот пост.
...
Рейтинг: 0 / 0
21.05.2012, 23:45
    #37804900
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести с VB на С
скукотища
Код: plaintext
1.
m_SenderBuffers[m_buf_nr].data[i]= (WORD)ch;


нет, не смущает.
Это досадная апечатка в посте.
Изначально делал
Код: plaintext
1.
m_SenderBuffers[m_buf_nr].data[i]= (BYTE)ch;


потом не зная что еще попробовать сделал (с Warning естественно)
Код: plaintext
1.
m_SenderBuffers[m_buf_nr].data[i]= ch;


а когда писал пост решил добавить для приличия, с дуру ляпнул WORD вместо BYTE.
Могу сказать одно:
Код
Код: plaintext
1.
2.
3.
  for (PINDEX i = 0; i < 2048; ++i)
    m_stream << i << "=" << (int)m_SenderBuffers[m_buf_nr].data[i] << " "; 
  m_stream << "\n";


и код
Код: vbnet
1.
2.
3.
4.
5.
            str = ""
            For i = 0 To 2047
                str = str & i & "=" & CInt(SenderBuffers(.buf_nr).data(i)) & " "
            Next i
            AddLog str


Дают абсолютно одинаковые распечатки (для одного и того же sff файла).
Отсюда вывод: массив в 2048 байт на C++ и на VB я заполняю одинаково.
А вот в указателе на массив в C++ я возможно напортачил, знать бы как.
Я смотрел еще раз в CAPI логи, там есть опция
CAPI DATA -> Extract Requests as Raw Binary Data
Так вот в "плохом" C++ варианте объем этих данных ~3,2кб, а в VB варианте ~83кб (что ~ соответствует размеру передаваемого факса).
Т.е. данные массива (правильного) почему то не передаются как должно.
Беда думаю с SetPtr, хотя странно почему одно приложение съедает, а другое нет.
...
Рейтинг: 0 / 0
22.05.2012, 00:43
    #37804942
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести с VB на С
> ...
> Дают абсолютно одинаковые распечатки (для одного и того же sff файла).
> Отсюда вывод: массив в 2048 байт на C++ и на VB я заполняю одинаково.

То, что приводите в c++ к 32-х битному целому, а в VB - к 16-и битному, - мелочи и к теме топика не относится. Или снова досадна опечатка ? :)


Продолжу бредить.

> Беда думаю с SetPtr, хотя странно почему одно приложение съедает, а другое нет.
Потому что одно приложение выполняется 32-х разрядным процессором, а другое - 64-х разрядным. :)

А если изменить описание сруктуры? Совсем 'чуть-чуть'...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    struct DataB3Req {
      DWORD   m_NCCI;
      DWORD   m_Data;
      WORD    m_Length;
      WORD    m_Handle;
      WORD    m_Flags;
      PUInt64 m_Data64;
// #if P_64BIT
//       void SetPtr(const void * ptr) { m_Data64 = (PUInt64)ptr; }
// #else
      void SetPtr(const void * ptr) { m_Data = (DWORD)ptr; }
// #endif
    } data_b3_req;
...
Рейтинг: 0 / 0
22.05.2012, 01:40
    #37804970
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести с VB на С
скукотищаТо, что приводите в c++ к 32-х битному целому, а в VB - к 16-и битному, - мелочи и к теме топика не относится. Или снова досадна опечатка ? :)
В данном случае делается исключительно для теста, распечатка выглядит примерно так
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SenderBuffers(0).data:
0=83 1=102 2=102 3=102 4=1 5=0 6=0 7=0 8=0 9=0 10=28 11=0 12=0 13=0 14=0 15=0
16=0 17=0 18=0 19=0 20=40 21=99 22=41 23=32 24=65 25=86 26=77 27=32 28=254 29=16 30=1
31=0 32=0 33=0 34=192 35=6 36=0 37=0 38=1 39=0 40=0 41=0 42=0 43=0 44=0 45=0
46=3 47=178 48=89 49=1 50=3 51=178 52=89 53=1 54=3 55=178 56=89 57=1 58=3 59=178 60=89
61=1 62=3 63=178 64=89 65=1 66=3
...
2018=54 2019=50 2020=44 2021=192 2022=192 2023=216 2024=7 2025=11 2026=90 2027=216 2028=96
2029=96 2030=238 2031=176 2032=81 2033=192 2034=220 2035=228 2036=97 2037=135 2038=6
2039=34 2040=186 2041=38 2042=204 2043=49 2044=176 2045=142 2046=10 2047=36 
DataB3Req.AppId=0
DataB3Req.Command=†
DataB3Req.DataLen=2048
DataB3Req.Flags=0
DataB3Req.Handle=0
DataB3Req.Length=22
DataB3Req.Message_Number=0
DataB3Req.NCCI=96513
DataB3Req.Pointer=11948661
DataB3Req.SubCommand=Ђ
SenderBuffers(1).data:
0=18 1=152 2=146 3=134 4=105 5=54 6=50 7=44 8=192 9=48 10=189 11=27 12=22 13=180 14=96 15=151
16=195 17=220 18=193 19=14 20=129 21=185 
...


Т.е. выше размерности BYTE не прыгнем, хоть к 16-битному, хоть к 32-битному,
а если тупо распечатывать байты, то байты и будут печататься, и будут иероглифы как в "DataB3Req.SubCommand=Ђ", где я к int привести поленился.
Это делается исключительно для проверки, чтоб понять что в C++ я формирую такие же массивы байтов как в полностью рабочем VB-коде.

скукотищаПродолжу бредить.
Продолжайте, может истину родим.

скукотища> Беда думаю с SetPtr, хотя странно почему одно приложение съедает, а другое нет.
Потому что одно приложение выполняется 32-х разрядным процессором, а другое - 64-х разрядным. :)
Проверить это можно. Для этого надо установить CAPI-приложение, которое "съедает" (из п.(1)) на "64-разрядный" комп, есть у меня 3-й тестовый комп, но что-то подсказывает, что оно будет там работать. OK, проверю. Это быстрее, чем тупо смотреть в коды и логи.


скукотища> А если изменить описание сруктуры? Совсем 'чуть-чуть'...
Код: plaintext
1.
2.
3.
4.
5.
// #if P_64BIT
//       void SetPtr(const void * ptr) { m_Data64 = (PUInt64)ptr; }
// #else
      void SetPtr(const void * ptr) { m_Data = (DWORD)ptr; }
// #endif


Проверю, конечно, но это вряд ли что-то даст.
#if P_64BIT означает 64-битное приложение, а не 64-битный процессор (или 64-битная OS).
А я всегда компилирую dll как 32-битное приложение (VC++2005 Express Edition по другому и не умеет), поэтому #if P_64BIT итак никогда не выполняется и m_Data64 по любому не используется.
...
Рейтинг: 0 / 0
22.05.2012, 01:47
    #37804971
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести с VB на С
> Дмитрий77
> Проверю, конечно, но это вряд ли что-то даст.
> ...

Тогда и проверять не стоит. Я думал, что P_64BIT имеет отношение к разрядности процессора.

На данный момент единственное, что ещё пришло в голову - установить, если это возможно, 'CAPI-систему от производитель #2 (Te-systems, X-CAPI)' на компьютер с 32-х разрядным процессором.
...
Рейтинг: 0 / 0
22.05.2012, 02:31
    #37804981
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести с VB на С
скукотища,

пока проверил
CAPI-система от производитель #1 (ComISDN)
OS=WinXP 32bit; Комп новый(64бит, 2 процессора)
(компьютер другой, но xp та же, даже та же "лицензия" использована -оказывается можно, Microsoft пока не поймал -гы)

>установить, если это возможно, 'CAPI-систему от производитель #2 (Te-systems, X-CAPI)' на компьютер с 32-х разрядным процессором.
Это надо на P-III, удалять ComISDN, устанавливать X-CAPI, неохота, и результат предполагаю будет отрицательный
(если в курсе то на одном компе==OS может стоять одновременно только одна capi2032.dll).

В документации CAPI 2.0 сказано так:

5.17 DATA_B3_REQ
Description
This message sends data within the logical connection identified by the NCCI. Data to
be sent are referenced by the parameters Data/Data length. The data is not contained
in the message: a 32-bit pointer is used to transfer the address of the data area.
The application
issues a unique identifier for this data block in the parameter Data handle.
This handle is used in a later DATA_B3_CONF.

Parameter Type Comment
NCCI dword Network Control Connection Identifier
Data dword Pointer to the data to be sent
Data length word Size of data area to be sent
Data handle word Referenced in DATA_B3_CONF
Flags word [0]: Qualifier bit
[1]: More-data bit
[2]: Delivery confirmation bit
[3]: Expedited data
[4]: UI frame
[5] to [15]: reserved
Data64 qword For 64bit applications: 64-bit pointer to the data to be sent.
Note
The data transfer does not support assembly or re-assembly of data.
An application must not change or free the data area before the corresponding

Ну для реализации последнего как раз и используется 8 буферов с перестраховкой, это при том что данные посылаются в 3 потока. Причем по CAPI логу я проверил, что 4-й CAPI_DATA_B3_REQ посылается четко после получения первого CAPI_DATA_B3_CONF, и т.д., т.е. перетирания данных в массивах быть не может, только он фигню видимо посылает вместо правильных данных, и почему-то только во втором варианте 'от производитель #2 (Te-systems, X-CAPI)', при этом Data length передается 2048 -это видно в CAPI логе.
...
Рейтинг: 0 / 0
22.05.2012, 23:31
    #37806881
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести с VB на С
Короче нашел зарытую собаку,
а с указателем все правильно у меня, если сделать конечно скидку на оч. слабое знание C++, курица пишет лапой.

1. сделал (почти уже в отчаянии)
Код: plaintext
1.
2.
3.
    struct Proto_DataBuffer {
      BYTE data[160];
    };


и, о чудо, мелкими блоками по 160 байт
CAPI-система от производитель #2 (Te-systems, X-CAPI)
факс прошел на ура!!!
160 взял не совсем случайно - это стандартная длина фрейма для голосового кодека.

2. Дальше прозрение пришло быстро.
VB-код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
'/*
'/*  Some global variables and fax related constants
'/*

Public Const MAXLOGICALCONNECTION = 2   ' normally 2, for two B channels of a BRI card
Public Const MAXBDATABLOCKS = 7         ' something around 7 is ok
Public Const MAXBDATALEN = 2048         ' packet length, 2048 bytes
Public Const MESSAGEBUFFERSIZE = 1024 + (1024 * MAXLOGICALCONNECTION)
                                        ' size, in bytes, of the message buffer that CAPI should
                                        ' reserve for this OCX

Public Function StartCapi() As Boolean
...
    X = CAPI_REGISTER(MESSAGEBUFFERSIZE, MAXLOGICALCONNECTION, MAXBDATABLOCKS, MAXBDATALEN, AppId)



С++ код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
enum {
    MaxLineCount = 30,
    MaxBlockCount = 2,
    MaxBlockSize = 160
};

  DWORD err = m_capi->REGISTER(MaxLineCount*MaxBlockCount*MaxBlockSize+1024,
                               MaxLineCount, MaxBlockCount, MaxBlockSize, &id);



Когда сделал:
Код: plaintext
1.
2.
3.
4.
5.
enum {
    MaxLineCount = 30, //'normally 30, for 30 B channels of a PRI card
    MaxBlockCount = 7, //' something around 7 is ok
    MaxBlockSize = 2048 //' packet length, 2048 bytes
};


все заработало как часики.

Т.е. я формировал корректный массив 2048 байт, делал на него правильный указатель,
CAPI-система молча отсчитывала от него первые 160 байтов, руководствуясь глобальными инструкциями, полученными при регистрации приложения и быстрехонько отсылала DATA_B3_CONF. При этом 160 байтов таки хватало для принятия заголовка SFF-файла (типа нормальные данные а не туфта), посему некое короткое подобие факса "в полосочку" таки "передавалось".

Остается вопрос почему таки работало первое приложение. Скорее всего тупо игнорировало инструкции в m_capi->REGISTER(), а делало приоритет на инструкции команды CAPI_DATA_B3_REQ, где указывалось DataLenth=2048. Практика такова, что всякие RFC и стандарты вендорами далеко не всегда соблюдаются, иногда не соблюдаются нарочно, дабы обеспечить максимальную совместимость с теми кто не соблюдает, так все и живут.
...
Рейтинг: 0 / 0
22.05.2012, 23:50
    #37806903
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести с VB на С
Дмитрий77,
поздравляю.
...
Рейтинг: 0 / 0
28.05.2012, 17:48
    #37814944
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите перевести с VB на С
А все-таки надо:

Код: plaintext
1.
2.
3.
4.
5.
MaxBlockSize = 160

struct Proto_DataBuffer {
  BYTE data[160];
};


VB-OCX написана только для факса. Opal работает как с факсами так и с голосом, в частности сам факс можно передавать поверх голосового канала, и если залепить 2048, то факс по голосовому каналу например не проходит, т.к. начинает слать голосовые фреймы по 2048 байт, что недопустимо для нормальной работы Ulaw/Alaw.
Сравнил с еще одним VOICE-FAX приложением (коммерческим) и понял что надо делать 160.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите перевести с VB на С / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]