Вверх ↑
Этот топик читают: Гость
Ответов: 8961
Рейтинг: 824
#1: 2010-03-14 14:40:59 ЛС | профиль | цитата
nesco, не подскажите как передать значение указателя (тип Pointer) в IC через верхнюю точку, а лучше как преобразовать тип 'String' в тип 'Pointer' (строку сверху я читать научился )


карма: 19

0
Ответов: 5446
Рейтинг: 323
#2: 2010-03-14 14:55:46 ЛС | профиль | цитата
Ну, Pointer - это DWORD в 32-битных системах и QWORD в 64-битных. Передавать, наверное, надо как целое.
карма: 1

0
Разработчик
Ответов: 26305
Рейтинг: 2146
#3: 2010-03-14 15:04:43 ЛС | профиль | цитата
Леонид писал(а):
строку сверху я читать научился

А зачем строку, можно и целое читать, например

i := ToIntegerEvent(Data);

карма: 22

0
Ответов: 8961
Рейтинг: 824
#4: 2010-03-14 15:12:20 ЛС | профиль | цитата
iarspider, т. е. строку (например, указатель на канал в BASS: "mainrecstream") перевести в число используя коды - явно больше, чем 64 бита!
карма: 19

0
Разработчик
Ответов: 26305
Рейтинг: 2146
#5: 2010-03-14 15:14:12 ЛС | профиль | цитата
Леонид, указатель в Винде не может быть больше 2^31, причем тут 64 бита
------------ Дoбавленo в 15.15:
Леонид, и объясни мне -- причем тут строка и указатель, это совсем разные вещи
------------ Дoбавленo в 15.16:
Короче, приведи наработки по IC и объясни, чего ты хочешь
карма: 22

0
Ответов: 8961
Рейтинг: 824
#6: 2010-03-14 15:22:30 ЛС | профиль | цитата
nesco, мне в IC надо получить handle существующего канала звука, обозначенного в свойствах, как "mainrecstream"
------------ Дoбавленo в 15.23:

Add(BASS_RecordStart,890969,665,238)
{
Freq=44100
Channels=2
Mode=1
Name="mainrecstream"
}
Add(InlineCode,2111790,609,238)
{
WorkPoints=#25:doStart=Стартовое событие|25:doWork=Расчитать значения|
EventPoints=#31:onAmpl=Выход канала светомузыки|21:onIndex=Индекс канала|
DataPoints=#25:Name=Имя звукового потока|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|26:uses kol,Share,Debug,bass;|0:|4:type|28: THiAsmClass = class(TDebug)|11: private |15: h:cardinal;|22: //_Name:^cardinal |9: public|19: Name:THI_Event;|25: _data_Data:THI_Event;|21: onAmpl:THI_Event;|22: onIndex:THI_Event;|51: procedure doStart(var _Data:TData; Index:word);|53: procedure doWork(var _Data:TData; Index:word); |4:end;|0:|14:implementation|45: Type TFFTData = array [0..1024] of Single;|2: |30:procedure THiAsmClass.doStart;|24: var _Name:^cardinal; |6: begin|26: _Name:='mainrecstream'^;|13: h := Name^;|7: end; |2: |29:procedure THiAsmClass.doWork;|23: var FFTData:TFFTData; |17: i:integer; |6: begin|0:|28: _hi_onEvent(onAmpl, 1);|31: _hi_onEvent(onIndex, 1); |5: end;|1: |4:end.|
}

карма: 19

0
Ответов: 5446
Рейтинг: 323
#7: 2010-03-14 15:27:26 ЛС | профиль | цитата
nesco, даже в 64-битных ОС?
карма: 1

0
Ответов: 8961
Рейтинг: 824
#8: 2010-03-14 15:28:44 ЛС | профиль | цитата
nesco, ранее я в компоненте BASS_RecordStart делал вывод handle на нижнюю точку, и вся проблема, но это изменение стандартного компонента!
карма: 19

0
Разработчик
Ответов: 26305
Рейтинг: 2146
#9: 2010-03-14 15:29:10 ЛС | профиль | цитата
iarspider писал(а):
даже в 64-битных ОС?

Нет, я имел в виду обычную, 32-х битную Винду
------------ Дoбавленo в 15.30:
Леонид, здесь применяется безлинковая передача указателя, так что учись работать с менеджерами
карма: 22

0
Разработчик
Ответов: 4698
Рейтинг: 426
#10: 2010-03-14 15:38:53 ЛС | профиль | цитата
Леонид, вообще почти ничего не понял, но думаю ты хочешь это
Add(InlineCode,12255854,322,252)
{
WorkPoints=#6:doWork|
DataPoints=#4:Hndl|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|20: hndl:THI_Event;|5: |51: procedure doWork(var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|29:procedure THiAsmClass.doWork;|16:var PH:cardinal;|37: //name:тут тип твоего басс потока|5:begin|32: PH := ReadInteger(_Data,Hndl);|34: name := {Тип твоего потока}(PH);|25: //делай с ним чего хош!|4:end;|0:|4:end.|
}
карма: 10
0
Ответов: 8961
Рейтинг: 824
#11: 2010-03-14 16:03:07 ЛС | профиль | цитата
nesco, "Не хочу учиться, а хочу жениться!" - и то и другое уже поздно
Где же мне найти такой менеджер, который передаст handle выработанный компонентом BASS_RecordStart в IC ?
Assasin, мне handle как раз и неизвестен, прочитать его сверху я не могу
карма: 19

0
Разработчик
Ответов: 4698
Рейтинг: 426
#12: 2010-03-14 16:06:14 ЛС | профиль | цитата
Леонид писал(а):
Где же мне найти такой менеджер, который передаст handle выработанный компонентом BASS_RecordStart в IC ?

codegen.dll
карма: 10
0
Ответов: 8961
Рейтинг: 824
#13: 2010-03-14 19:49:13 ЛС | профиль | цитата
Assasin, ни разочка не работал с codegen.dll
nesco, пошёл по проторенному пути: вывел handle на нижнюю точку:
hiBASS_RecordStart.pas писал(а):
unit hiBASS_RecordStart;
.
.
private
FHandle:HRECORD;
.
.
procedure _var_Handle(var _Data:TData; Index:word);
.
.
[color=red]procedure THIBASS_RecordStart._var_Handle;
begin
dtInteger(_Data, FHandle);
end;[/color]
end.

цветом выделено добавление, но тут меня поджидала неудача - на выходе отрицательное число -2147483647, и как я ни пытался преобразовать в строку, в int64 ничего не получилось "Что делать?" (кто виноват - я знаю )
карма: 19

0
Разработчик
Ответов: 26305
Рейтинг: 2146
#14: 2010-03-14 19:51:56 ЛС | профиль | цитата
Леонид, еще раз тебе повторяю, строка не может никоим образом соотносится с указателем. Указатель -- это адрес памяти.
------------ Дoбавленo в 19.53:
И вообще, что ты собираешься сделать и для чего такие заморочки
------------ Дoбавленo в 19.56:
Короче, постарайся описать подробнее задачу
карма: 22

0
Ответов: 8961
Рейтинг: 824
#15: 2010-03-14 20:01:31 ЛС | профиль | цитата
nesco, я хочу в IC обработать данные FFT полученные от BASS, но для этого мне нужен Handle запущенного через BASS_RecordStart канала.
В старых версиях HiAsm мне это удавалось (см. мой предыдущий пост), а с BASS_2.4 не удалось.
карма: 19

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)