Помогите в переводе Сишного хидера

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Помогите в переводе Сишного хидера

Сообщение jangle » 26.09.2008 (Пт) 12:22

Народ помогите, несколько месяцев не программировал, мозги децл подсохли! :cry:
Надо спрочно перевести этот сишный хидер на VB или PB

Код: Выделить всё
// Copyright (C) 2004 Canopus Co., Ltd. All rights reserved.
#ifndef _M4CCTRL_H_
#define _M4CCTRL_H_

// --- return code
#define M4C_SUCCESS               0
#define M4C_FAILURE               1   // Unspecified error
#define M4C_FAIL_OPEN_FILE         2   // file open failure
#define M4C_FAIL_READ_FILE         3   // file read failure
#define M4C_FAIL_WRITE_FILE         4   // file write failure
#define M4C_FAIL_ALLOC_FAILURE      5   // alloc failure
#define M4C_FAIL_BADPARAM         6   // Invalid parameter
#define M4C_FAIL_UNSUPPORTED      7   // unsupported
#define M4C_FAIL_DEMUXERROR         8   // incorrect stream format
#define M4C_END_OF_STREAM         -1   // The end of stream has been reached

// --- convert mode
#define M4C_CM_FILE               0
#define M4C_CM_MEMORY            1

// --- status code
#define M4C_SC_NOTREADY            0   // not initialized
#define M4C_SC_READY            1
#define M4C_SC_RUNNING            2
#define M4C_SC_STOPPING            3
#define M4C_SC_COMPLETE            4
#define M4C_SC_ERROR_STOP         5

// --- stream type
#define M4C_ST_UNKNOWN            0
#define M4C_ST_PROGRAMSTREAM      1
#define M4C_ST_TRANSPORTSTREAM      2   // not supported

// --- video type
#define M4C_VT_UNKNOWN            0
#define M4C_VT_MPEG1            1   // not supported
#define M4C_VT_MPEG2            2   // not supported
#define M4C_VT_MPEG4            4

// --- audio type
#define M4C_AT_UNKNOWN            0
#define M4C_AT_MPEG1_LAYER1         1
#define M4C_AT_MPEG1_LAYER2         2
#define M4C_AT_MPEG1_LAYER3         3   // not supported
#define M4C_AT_AC3               4   // not supported
#define M4C_AT_LPCM               5   // not supported

// convert status
typedef struct {
   int nStatusCode;
//#define M4C_SC_NOTREADY         0
//#define M4C_SC_READY            1
//#define M4C_SC_RUNNING         2
//#define M4C_SC_STOPPING         3
//#define M4C_SC_COMPLETE         4
//#define M4C_SC_ERROR_STOP         5
   LONGLONG llPosition;
   LONGLONG llTotalSize;
} M4C_STATUS, *PM4C_STATUS;

// source media file information.
typedef struct {
   int StreamType;
//#define M4C_ST_UNKNOWN         0
//#define M4C_ST_PROGRAMSTREAM      1
//#define M4C_ST_TRANSPORTSTREAM   2
   LONGLONG llStreamLen;
   LONGLONG llFileLen;
   int VideoType;
//#define M4C_VT_UNKNOWN         0
//#define M4C_VT_MPEG1            1
//#define M4C_VT_MPEG2            2
//#define M4C_VT_MPEG4            4
   DWORD dwVideoWidth;
   DWORD dwVideoHeigh;
   DWORD dwVideoBitrate;
   float fVideoFrameRate;
   int AudioType;
//#define M4C_AT_UNKNOWN         0
//#define M4C_AT_MPEG1_LAYER1      1
//#define M4C_AT_MPEG1_LAYER2      2
//#define M4C_AT_MPEG1_LAYER3      3
//#define M4C_AT_AC3            4
//#define M4C_AT_LPCM            5
   DWORD dwAudioBitrate;
   DWORD dwAudioSamplingRate;
   DWORD dwAudioChannelNumber;
} MEDIA_INFO, *PMEDIA_INFO;

typedef int (CALLBACK* M4C_CONVERT_CALLBACK)(HANDLE hHandle, LONGLONG llOffset, LPBYTE pbBuff, DWORD cbBuff, LPDWORD pcbReadBytes, DWORD dwParam);
typedef VOID (CALLBACK* M4C_STATUS_CALLBACK)(HANDLE hHandle, DWORD dwStatus, DWORD dwParam);

typedef struct {
   int nRetCode;
   LPCTSTR pszMP4FileName;
   int nConvertMode;
//#define M4C_CM_FILE            0
//#define M4C_CM_MEMORY            1
   union {
      struct _convert_memory {
         DWORD dwParam;
         M4C_CONVERT_CALLBACK ConvertCallback;
         LONGLONG llSetupBytes;
      } ConvertMemoryInfo;

      struct _convert_file {
         LPCTSTR pszConvertFileName;
      } ConvertFileInfo;
   };
} M4C_OPEN_PARAM;

///////////////////////////////////////////////////////////////////////
//
#define M4CAPI(ret) __declspec(dllexport) ret _stdcall

#if defined(__cplusplus)
extern "C" {
#endif

M4CAPI(HANDLE) M4C_Open(M4C_OPEN_PARAM* pOpenParam);
M4CAPI(int) M4C_Close(HANDLE hHandle);

M4CAPI(int) M4C_StartConvert(HANDLE hHandle);
M4CAPI(int) M4C_StopConvert(HANDLE hHandle);

M4CAPI(int) M4C_GetMediaInfo(HANDLE hHandle, PMEDIA_INFO* ppMediaInfo);
M4CAPI(int) M4C_GetStatus(HANDLE hHandle, PM4C_STATUS* ppStatus);

M4CAPI(int) M4C_SetStatusCallback(HANDLE hHandle, M4C_STATUS_CALLBACK pCallback, DWORD dwParam);

#if defined(__cplusplus)
}
#endif

#endif   //#ifndef _M4CCTRL_H_

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Помогите в переводе Сишного хидера

Сообщение Хакер » 26.09.2008 (Пт) 13:42

Код: Выделить всё
// --- return code
#define M4C_SUCCESS               0
#define M4C_FAILURE               1   // Unspecified error
#define M4C_FAIL_OPEN_FILE         2   // file open failure
#define M4C_FAIL_READ_FILE         3   // file read failure
#define M4C_FAIL_WRITE_FILE         4   // file write failure
#define M4C_FAIL_ALLOC_FAILURE      5   // alloc failure
#define M4C_FAIL_BADPARAM         6   // Invalid parameter
#define M4C_FAIL_UNSUPPORTED      7   // unsupported
#define M4C_FAIL_DEMUXERROR         8   // incorrect stream format
#define M4C_END_OF_STREAM         -1   // The end of stream has been reached

<...>

// --- audio type
#define M4C_AT_UNKNOWN            0
#define M4C_AT_MPEG1_LAYER1         1
#define M4C_AT_MPEG1_LAYER2         2
#define M4C_AT_MPEG1_LAYER3         3   // not supported
#define M4C_AT_AC3               4   // not supported
#define M4C_AT_LPCM               5   // not supported

Эта часть переводится заменой "#define xxxxxxxxx yyyyyyyyy" на "Public Const xxxxxxx = yyyyyyyy".


Код: Выделить всё
typedef struct {
   int StreamType;
   LONGLONG llStreamLen;
   LONGLONG llFileLen;
   int VideoType;
   DWORD dwVideoWidth;
   DWORD dwVideoHeigh;
   DWORD dwVideoBitrate;
   float fVideoFrameRate;
   int AudioType;
   DWORD dwAudioBitrate;
   DWORD dwAudioSamplingRate;
   DWORD dwAudioChannelNumber;
} MEDIA_INFO, *PMEDIA_INFO;


Эта часть переводится так:
"typedef struct {" заменяется на "Public Type MEDIA_INFO", "}, MEDIA_INFO, *PMEDIA_INFO;" заменяется на "End Type".
Внутренности переводятся следующим образом: первое и второе слово меняются местами. Второе (после перестановки) слово заменяется по следующему принципу:
"DWORD" и "int" заменяются на "As Long", "float" заменяется на "As Single".
"LONGLONG" заменяется на две строчки с Long. Первое слово при этом дублировании, естественно, изменяется.

Код: Выделить всё
typedef int (CALLBACK* M4C_CONVERT_CALLBACK)(HANDLE hHandle, LONGLONG llOffset, LPBYTE pbBuff, DWORD cbBuff, LPDWORD pcbReadBytes, DWORD dwParam);
typedef VOID (CALLBACK* M4C_STATUS_CALLBACK)(HANDLE hHandle, DWORD dwStatus, DWORD dwParam);

Эта часть абсолютно непереводима на VB, т.к. находится вне его языковой концепции.


Код: Выделить всё
typedef struct {
   int nRetCode;
   LPCTSTR pszMP4FileName;
   int nConvertMode;
//#define M4C_CM_FILE            0
//#define M4C_CM_MEMORY            1
   union {
      struct _convert_memory {
         DWORD dwParam;
         M4C_CONVERT_CALLBACK ConvertCallback;
         LONGLONG llSetupBytes;
      } ConvertMemoryInfo;

      struct _convert_file {
         LPCTSTR pszConvertFileName;
      } ConvertFileInfo;
   };
} M4C_OPEN_PARAM;

Убираешь юнион, клонируешь, в каждом варианте оставляешь только один struct (разный, в каждом случае). Далее действуешь по вышеприведенной схеме. Как быть с LPCSTR неизвестно, видимо, придется заменить на Long.



Код: Выделить всё
M4CAPI(HANDLE) M4C_Open(M4C_OPEN_PARAM* pOpenParam);
M4CAPI(int) M4C_Close(HANDLE hHandle);

M4CAPI(int) M4C_StartConvert(HANDLE hHandle);
M4CAPI(int) M4C_StopConvert(HANDLE hHandle);

M4CAPI(int) M4C_GetMediaInfo(HANDLE hHandle, PMEDIA_INFO* ppMediaInfo);
M4CAPI(int) M4C_GetStatus(HANDLE hHandle, PM4C_STATUS* ppStatus);

M4CAPI(int) M4C_SetStatusCallback(HANDLE hHandle, M4C_STATUS_CALLBACK pCallback, DWORD dwParam);

Как переводить этот код неизвестно, либо его вообще не надо переводить, либо его надо перевести в соответствующие Declare-конструкции.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Помогите в переводе Сишного хидера

Сообщение jangle » 26.09.2008 (Пт) 13:46

Хакер - спасибо за помощь! :)

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Помогите в переводе Сишного хидера

Сообщение ANDLL » 26.09.2008 (Пт) 14:43

Хакер писал(а):Как быть с LPCSTR неизвестно, видимо, придется заменить на Long.)
Хотя с другой стороны можно заменить на String
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Помогите в переводе Сишного хидера

Сообщение jangle » 26.09.2008 (Пт) 15:10

Хакер, что-то не совсем понял, как эту структуру перевести, не подскажешь код?

Код: Выделить всё
typedef struct {
   int nRetCode;
   LPCTSTR pszMP4FileName;
   int nConvertMode;
//#define M4C_CM_FILE            0
//#define M4C_CM_MEMORY            1
   union {
      struct _convert_memory {
         DWORD dwParam;
         M4C_CONVERT_CALLBACK ConvertCallback;
         LONGLONG llSetupBytes;
      } ConvertMemoryInfo;

      struct _convert_file {
         LPCTSTR pszConvertFileName;
      } ConvertFileInfo;
   };
} M4C_OPEN_PARAM;

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Помогите в переводе Сишного хидера

Сообщение tyomitch » 26.09.2008 (Пт) 15:24

jangle писал(а):Хакер, что-то не совсем понял, как эту структуру перевести, не подскажешь код?

Код: Выделить всё
typedef struct {
   int nRetCode;
   LPCTSTR pszMP4FileName;
   int nConvertMode;
//#define M4C_CM_FILE            0
//#define M4C_CM_MEMORY            1
   union {
      struct _convert_memory {
         DWORD dwParam;
         M4C_CONVERT_CALLBACK ConvertCallback;
         LONGLONG llSetupBytes;
      } ConvertMemoryInfo;

      struct _convert_file {
         LPCTSTR pszConvertFileName;
      } ConvertFileInfo;
   };
} M4C_OPEN_PARAM;



Код: Выделить всё
Type M4C_OPEN_PARAM
   nRetCode As Long
   pszMP4FileName As Long ' с большой осторожностью можно As String
   nConvertMode As Long
   dwParam As Long ' он же pszConvertFileName
   ConvertCallback As Long
   llSetupBytes As Currency
End Type



Заодно: гораздо легче переделывать сишные хедеры в IDL, и подключать как TLB.
У меня даже самописная конвертилка когда-то была.
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Помогите в переводе Сишного хидера

Сообщение jangle » 26.09.2008 (Пт) 15:33

tyomitch - а pszConvertFileName этой структуре не принадлежит?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Помогите в переводе Сишного хидера

Сообщение tyomitch » 26.09.2008 (Пт) 15:51

jangle, у тебя даже очки на аватаре есть.
Неужели всё равно её там не видишь? ;-)
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Помогите в переводе Сишного хидера

Сообщение jangle » 26.09.2008 (Пт) 15:56

tyomitch писал(а):jangle, у тебя даже очки на аватаре есть.
Неужели всё равно её там не видишь? ;-)


Так очки черные же! Как у слепого :D

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Помогите в переводе Сишного хидера

Сообщение Mikle » 28.09.2008 (Вс) 9:39

tyomitch писал(а):У меня даже самописная конвертилка когда-то была.

Дай! :roll:

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Re: Помогите в переводе Сишного хидера

Сообщение StimorolD3DX » 28.09.2008 (Вс) 17:11

У меня даже самописная конвертилка когда-то была.

Конвертилку в студию!

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Помогите в переводе Сишного хидера

Сообщение jangle » 28.09.2008 (Вс) 18:51

Да конвертер пригодился бы

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Помогите в переводе Сишного хидера

Сообщение Хакер » 28.09.2008 (Вс) 21:37

Нет бы самим написать... :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Помогите в переводе Сишного хидера

Сообщение Mikle » 29.09.2008 (Пн) 8:58

Хакер писал(а):Нет бы самим написать

Программы-конвертилки такого уровня не сложны, и я бы написал сам, мне это даже интересно 8) .
Но для этого нужно входной формаьт изучить C++ и выходной не_помню_как_называется.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Помогите в переводе Сишного хидера

Сообщение jangle » 29.09.2008 (Пн) 9:14

Зачем писать, если у tyomitch`а готовая есть

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Помогите в переводе Сишного хидера

Сообщение jangle » 29.09.2008 (Пн) 10:13

Пытаюсь перевести эту структуру на PB

Код: Выделить всё
typedef struct {
   int nRetCode;
   LPCTSTR pszMP4FileName;
   int nConvertMode;
//#define M4C_CM_FILE            0
//#define M4C_CM_MEMORY            1
   union {
      struct _convert_memory {
         DWORD dwParam;
         M4C_CONVERT_CALLBACK ConvertCallback;
         LONGLONG llSetupBytes;
      } ConvertMemoryInfo;

      struct _convert_file {
         LPCTSTR pszConvertFileName;
      } ConvertFileInfo;
   };
} M4C_OPEN_PARAM;


PB

Код: Выделить всё
Union  ConvertMemoryInfo
       dwParam As Dword
       ConvertCallback As Dword
       llSetupBytes As Quad
End Union

Union  ConvertFileInfo
       pszConvertFileName As Asciiz Ptr
End Union

Type M4C_OPEN_PARAM
     nRetCode As Long
     pszMP4FileName As Asciiz Ptr
     nConvertMode As Long
     struct_convert_memory As  ConvertMemoryInfo
     struct_convert_file  As   ConvertFileInfo
End Type     


Вроде правильно ее записал?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Помогите в переводе Сишного хидера

Сообщение tyomitch » 29.09.2008 (Пн) 22:45

jangle писал(а):Пытаюсь перевести эту структуру на PB

Код: Выделить всё
typedef struct {
   int nRetCode;
   LPCTSTR pszMP4FileName;
   int nConvertMode;
//#define M4C_CM_FILE            0
//#define M4C_CM_MEMORY            1
   union {
      struct _convert_memory {
         DWORD dwParam;
         M4C_CONVERT_CALLBACK ConvertCallback;
         LONGLONG llSetupBytes;
      } ConvertMemoryInfo;

      struct _convert_file {
         LPCTSTR pszConvertFileName;
      } ConvertFileInfo;
   };
} M4C_OPEN_PARAM;


PB

Код: Выделить всё
Union  ConvertMemoryInfo
       dwParam As Dword
       ConvertCallback As Dword
       llSetupBytes As Quad
End Union

Union  ConvertFileInfo
       pszConvertFileName As Asciiz Ptr
End Union

Type M4C_OPEN_PARAM
     nRetCode As Long
     pszMP4FileName As Asciiz Ptr
     nConvertMode As Long
     struct_convert_memory As  ConvertMemoryInfo
     struct_convert_file  As   ConvertFileInfo
End Type     


Вроде правильно ее записал?



Наоборот:
Код: Выделить всё
Type ConvertMemoryInfo
       dwParam As Dword
       ConvertCallback As Dword
       llSetupBytes As Quad
End Type

Type  ConvertFileInfo
       pszConvertFileName As Asciiz Ptr
End Type

Union u
     struct_convert_memory As  ConvertMemoryInfo
     struct_convert_file  As   ConvertFileInfo
End Union

Type M4C_OPEN_PARAM
     nRetCode As Long
     pszMP4FileName As Asciiz Ptr
     nConvertMode As Long
     u As u
End Type     



А конвертилка осталась на работе, где я уже два года не бывал.
Изображение

BVBot
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 08.09.2008 (Пн) 15:38

Re: Помогите в переводе Сишного хидера

Сообщение BVBot » 30.09.2008 (Вт) 10:37

jangle, так то, что я тебе написал на сырцах -- тебе не нужно? Тебе нужен сам пример на PB?

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Помогите в переводе Сишного хидера

Сообщение jangle » 30.09.2008 (Вт) 13:22

BVBot писал(а):jangle, так то, что я тебе написал на сырцах -- тебе не нужно? Тебе нужен сам пример на PB?


Нужно конечно, а на PB мне не удалось завести прогу


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 81

    TopList  
cron