Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.25;
Скачать: CL | DM;

Вниз

прочитать массив по определённому адресу   Найти похожие ветки 

 
serg_iv   (2005-07-08 12:42) [0]

есть такая СИшная функция(вызывается из DLL):

Задать функцию, принимающую данные.
void CPSO_SetUpReceiverProc(LPVOID pReceiverProc);
pReceiverProc - Указатель на функцию пользователя, в которой принятые данные будут передаваться для последующей обработки.

Функция пользователя должна быть определена как:
BOOL ReceiverProc(double dInputTime, unsigned short * InputCodeSample);
где:
Возвращаемое значение   Обычно следует возвращать TRUE. Устанавливайте FALSE, если пользовательская программа занята и не успевает обработать текущую выборку. Передача этой выборки будет повторена.
dInputTime - Время на момент приема текущей выборки.
InputCodeSample - Адрес массива, из которого пользователь может прочитать последние принятые данные. Длина массива равна 64 шестнадцатиразрядных слов. Однако действительны только первые его элементы, столько, чему равно количество входных каналов

Как прочитать массив находящийся по адресу(InputCodeSample)?
Естественно всё это делается в Делфи!


 
begin...end ©   (2005-07-08 12:51) [1]

PWordArray(InputCodeSample)[I], где I -- индекс элемента (в диапазоне 0..16383).


 
Digitman ©   (2005-07-08 13:03) [2]

type

PInputCodeSample = ^TInputCodeSample;
TInputCodeSampleItem = Word;
TInputCodeSample = array[0..63] of TInputCodeSampleItem;

TReceiverProc = function(dInputTime: double; InputCodeSample: PInputCodeSample): Boolean; stdcall;

TCPSO_SetUpReceiverProc = procedure(pReceiverProc: TReceiverProc); stdcall;

..

var
 CPSO_SetUpReceiverProc: TCPSO_SetUpReceiverProc;
 InputCodeSample: TInputCodeSample;
..

function ReceiverProc(dInputTime: double; InputCodeSample: PInputCodeSample): Boolean; stdcall;
var
 i: Integer;
 item: TInputCodeSampleItem;
begin
 for i:= 0 to 63 do
   InputCodeSampleItem := InputCodeSample[i];
..
 
end;

..
CPSO_SetUpReceiverProc(@ReceiverProc);


 
evvcom ©   (2005-07-08 13:06) [3]

Я бы советовал все же использовать
PWordArray(InputCodeSample)^[I]
компилятору, конечно, без разницы, но при отладке, наведя мышью на ^, в хинте увидим содержимое массива. Тогда как в [1] только адрес или значение I-го элемента.


 
serg_iv   (2005-07-08 15:15) [4]

Спасибо тем, кто мне помог.
Теперь я могу прочитать массив, но после однократной отработки функции программу почему-то выбрасывает в дебаггер.
Отправляюсь с этим бороться.


 
Digitman ©   (2005-07-08 15:20) [5]

возможно, библиотека использует другое соглашение - cdecl (а не stdcall)


 
serg_iv   (2005-07-08 18:30) [6]

Точно!



Страницы: 1 вся ветка

Текущий архив: 2005.07.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
1-1120468392
PEKAHT
2005-07-04 13:13
2005.07.25
Скролинг в TreeView


1-1120658463
Будущий рядовой РА
2005-07-06 18:01
2005.07.25
Код не работает


8-1111828052
^KROT^
2005-03-26 12:07
2005.07.25
Что то он один файл проигрывает


14-1120244921
ArMellon
2005-07-01 23:08
2005.07.25
Дайте образ загрузочного диска win98 или Me


1-1120415849
Trubis
2005-07-03 22:37
2005.07.25
устанавливаю длину динамического массива и вылетаю :(