Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.07.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.012 c
3-1118592202
slavaak
2005-06-12 20:03
2005.07.25
Сохранение данных произвольной структуры в ClientDataSet


1-1120666164
jagr
2005-07-06 20:09
2005.07.25
Подпрограмма не определяет компонент


1-1120113261
intaari
2005-06-30 10:34
2005.07.25
внесение изменений в memo готового отчет, fastreport 3.0


1-1120647706
irq
2005-07-06 15:01
2005.07.25
Запуск программы после запуска определенного сервиса


14-1120304288
Andy BitOff
2005-07-02 15:38
2005.07.25
ПредлагаЮТ работку.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский