Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2009, 02:49   #1
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
Восклицание Помогите перевести на язык делфи код с С++!

Доброй ночи!
Помогите перевести на язык делфи следующий код:

Код:
int triggerlevel=1000;
BOOL triggered=FALSE;

BOOL CALLBACK RecordingCallback(HRECORD handle, void *buffer, DWORD length, DWORD user)
{
	if (!triggered) {
		short *s=(short*)buffer;
		int a;
		for (a=0;a<length/2;a++)
			if (abs(s[a])>=triggerlevel) {
				triggered=TRUE;
				break;
			}
		if (!triggered) return TRUE;
	}

	// increase buffer size if needed
	if ((reclen%BUFSTEP)+length>=BUFSTEP) {
		recbuf=realloc(recbuf,((reclen+length)/BUFSTEP+1)*BUFSTEP);
		if (!recbuf) {
			rchan=0;
			Error("Out of memory!");
			MESS(10,WM_SETTEXT,0,"Record");
			return FALSE; // stop recording
		}
	}
	// buffer the data
	memcpy(recbuf+reclen,buffer,length);
	reclen+=length;
	return TRUE; // continue recording
}
//=================================== ===========
Спасибо.

Последний раз редактировалось Stilet; 18.05.2009 в 09:40.
SkAndrew вне форума Ответить с цитированием
Старый 18.05.2009, 11:05   #2
beemoto
Форумчанин
 
Аватар для beemoto
 
Регистрация: 11.04.2009
Сообщений: 277
По умолчанию

для того чтоб те перевели надо хоть сказать что этот за код!
чтоб знали чего ты хочеш(иначе переводить нет смысла)
beemoto вне форума Ответить с цитированием
Старый 18.05.2009, 11:46   #3
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

это процедура активации голосом записи звука на библиотеке BASS. Спасибо за помощь.

Хотя бы подскажите что это за строки и как их в делфи перевести:
Код:
{
	if (!triggered) {
		short *s=(short*)buffer;
		int a;
Спасибо

Может кто-нибудь проверить следующий код на ошибки?

Код:
function RecordingCallback (handle : HRECORD; buffer : Pointer; length : DWord; User : DWord) : Boolean; stdcall;
        var s : Smallint;
              a : Integer;
begin
    if not triggered then
    begin
        s := PSmallint(buffer)^; 
        for a := 0 to (length/2)-1 do
           if (abs(s[a]) >= triggerlevel) then
           begin
               triggered := True;
               Break;
          end; 
          Result := True;
    end; 
    // increase buffer size if needed
    if ((reclen mod BUFSTEP)+length >= BUFSTEP) then
    begin
        recbuf := realloc(recbuf,((reclen+length)/BUFSTEP+1)*BUFSTEP);
        if (not recbuf) then
        begin
            rchan=0;
            Error("Out of memory!");
            MessageDialog(10,WM_SETTEXT,0,"Record");
            Result := False; // stop recording
        end; 
    end; 
    // buffer the data
    CopyMemory(recbuf+reclen,buffer,length);
    reclen :=reclen+length;
    Result := True;
end;
Спасибо

Пожалуйста, подскажите хотя бы как правильно перевести на делфи вот эту конструкцию Си:
Код:
short *s=(short*)buffer;
спасибо.

Последний раз редактировалось Stilet; 21.05.2009 в 11:10.
SkAndrew вне форума Ответить с цитированием
Старый 19.05.2009, 11:51   #4
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

создается переменная s с указателем на первые 4 байта переменной buffer. что-то типа того ...
скорее всего это просто длинна переменной buffer , которая передается в процедуру
По-моему так :
Код:
s:= buffer^;
"Заряженному танку в дуло не смотрят" @Dekmer in WoT

Последний раз редактировалось Kotofff; 19.05.2009 в 11:56.
Kotofff вне форума Ответить с цитированием
Старый 19.05.2009, 20:40   #5
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

Извините, но перевод неверный. Может есть специалист, который может проконсультировать. Спасибо.
SkAndrew вне форума Ответить с цитированием
Старый 20.05.2009, 15:08   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
short *s=(short*)buffer;
to
Код:
... {void *buffer} buffer: Pointer; ...
...
var s: PWord;
begin
   s := buffer;
Как просто не так ли ?
BOBAH13 вне форума Ответить с цитированием
Старый 20.05.2009, 20:51   #7
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

Извини еще раз, но последний вариант тоже неверный.

исходный код на Си:

Код:
void *buffer 
short *s=(short*)buffer;
на делфи вроде так:

Код:
Buffer: Pointer;
s : PSmallInt;
s := PSmallint(buffer);
Но, не уверен, что это правильно.
Кто поможет разобраться в правильности трансляции на делфи?
Спасибо всем за любую помощь!
SkAndrew вне форума Ответить с цитированием
Старый 21.05.2009, 09:41   #8
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Цитата:
Извини еще раз, но последний вариант тоже неверный.

исходный код на Си:

Код:

void *buffer
short *s=(short*)buffer;
на делфи вроде так:

Код:

Buffer: Pointer;
s : PSmallInt;
s := PSmallint(buffer);
А разница то какая? PSmallInt = PWord = Pointer. Это просто типилизация.
short по стандарту <= int
Из этого следует, размер short зависит от реализации...

Последний раз редактировалось Ring0Sn; 21.05.2009 в 09:52.
Ring0Sn вне форума Ответить с цитированием
Старый 21.05.2009, 16:21   #9
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Мда.... что тут скажеш, если хотите просто по флудить то я и мешать не буду... для начала:

1. Что SmallInt что Word, одно и тоже. Следственно PSmallInt = PWord.
2.
Цитата:
А разница то какая? PSmallInt = PWord = Pointer. Это просто типилизация.
ИМЕННО!!!
3.
Цитата:
Пожалуйста, подскажите хотя бы как правильно перевести на делфи вот эту конструкцию Си:
Код:

short *s=(short*)buffer;

спасибо.
Ответ я дал.

Почему PWord - потому что short*
Почему buffer: Pointer - потому что void*

Что не так ?
BOBAH13 вне форума Ответить с цитированием
Старый 21.05.2009, 18:49   #10
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Цитата:
Ответ я дал.

Что не так ?
Тоже интересно по каким причинам SkAndrew посчитал что
Цитата:
но последний вариант тоже неверный.
Код:
... {void *buffer} buffer: Pointer; ...
...
var s: PWord;
begin
   s := buffer;
А тоже самое записаное иначе

[CODE]
Код:
Buffer: Pointer;
s : PSmallInt;
s := PSmallint(buffer);
чем то отличается :Ч
Ring0Sn вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перевести на делфи следующий код? SkAndrew Общие вопросы Delphi 7 15.05.2009 21:48
Код игры на Паскале и на Делфи сильно отличается? Как переписать код с Паскаля в Делфи? Mclaren Помощь студентам 2 27.04.2009 22:37