реклама на сайте
подробности

 
 
> Как вызвать функции Си DLL из Delphi, Subj и как правильно передать массив
AndV
сообщение Oct 24 2008, 06:08
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 7-12-05
Пользователь №: 11 909



Здравствуйте!
Есть библиотека, написанная на Си (протокол Wake).
Как вызывать функции из этой DLL и передавать в нее массивы?
Заголовок DLL такой:
Код
...
extern "C"
{

  WSP32_API bool WINAPI AccessCOM(char *P);
  WSP32_API bool WINAPI OpenCOM(char *P, DWORD baud);
  WSP32_API bool WINAPI CloseCOM(void);
  WSP32_API bool WINAPI SetModLns(DWORD F);
  WSP32_API bool WINAPI GetModLns(LPDWORD lpD);
  WSP32_API bool WINAPI PurgeCOM(void);
  WSP32_API bool WINAPI FlushCOM(void);
  WSP32_API bool WINAPI GetMaskCOM(LPDWORD lpEvtMask);
  WSP32_API bool WINAPI SetMaskCOM(DWORD EvtMask);
  WSP32_API bool WINAPI WaitEventCOM(LPDWORD lpEvtMask);
  WSP32_API bool WINAPI RxFrame(DWORD To, unsigned char &ADD,
             unsigned char &CMD, unsigned char &N, unsigned char *Data);
  WSP32_API bool WINAPI TxFrame(unsigned char ADDR, unsigned char CMD,
             unsigned char N, unsigned char *Data);
}

В Delphi написал так:
Код
interface
...
function AccessCOM(p:string):boolean;  stdcall;
function OpenCOM(p:string;baud:DWORD):boolean; stdcall;
function CloseCOM():boolean; stdcall;
function SetModLns(f:DWORD):boolean;  stdcall;
function GetModLns(lpD:LPDWORD ):boolean;  stdcall;
function PurgeCOM():boolean;  stdcall;
function FlushCOM():boolean;  stdcall;
function GetMaskCOM(lpEvtMask:LPDWORD):boolean;  stdcall;
function SetMaskCOM(EvtMask:DWORD):boolean;  stdcall;
function WaitEventCOM(lpEvtMask:LPDWORD):boolean;  stdcall;
function RxFrame(Too:DWORD;var ADD:byte;var CMD:byte;var N:byte;var Data:array of byte):boolean;stdcall;
function TxFrame(ADDR:byte; CMD:byte; N:byte; Data:array of byte):boolean;  stdcall;
...
implementation

function AccessCOM; external 'wsp32.dll';
function OpenCOM; external 'wsp32.dll';
function CloseCOM; external 'wsp32.dll';
function SetModLns; external 'wsp32.dll';
function GetModLns; external 'wsp32.dll';
function PurgeCOM; external 'wsp32.dll';
function FlushCOM; external 'wsp32.dll';
function GetMaskCOM; external 'wsp32.dll';
function SetMaskCOM; external 'wsp32.dll';
function WaitEventCOM; external 'wsp32.dll';
function RxFrame; external 'wsp32.dll';
function TxFrame; external 'wsp32.dll';

Вроде работает, но не уверен, правильно ли это.
Основная проблема с функцией RxFrame. Не знаю, как правильно передать в нее массив.
Пробовал и статический массив и динамический, постоянно то Privileged Instructions, то Access Violation.
Подскажите, как правильно описать функцию RxFrame и как правильно описать и передать в нее массив Data.
Желательно пример кода.

Спасибо!

PS. Если имеет значение - Delphi TurboExplorer 2006
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 15:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01336 секунд с 7
ELECTRONIX ©2004-2016