Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

использование внешней библиотеки [D7, WinXP]


Zilog ©   (2006-06-20 17:57:00) 

из описания к dll:
LONG Test(DWORD dwDevice, DPRTESTMSGPROC msgp, DPRTESTPROGRESS prgp);

я описал процедуру так:
 function Test(dwDevice : word; msgp : DPRTESTMSGPROC; prgp : DPRTESTPROGRESS) : double; far; stdcall external 'mydll.dll';

однако как описать  неизветные типы я не понял.
в мануале сказано следующее:

typedef void (FAR WINAPI *DPRTESTMSGPROC)(LONG NumErrors,LPTSTR Action,LONG CurrentOffset);

как мне это перевести на делфи?


Ega23   (2006-06-21 16:31:00) [1]


> PCHAR - непонятго, то ли это pchar, то ли указатель, судя
> по мануалу... :(


Вот разберись сначала, что в твоей библиотеке PCHAR значит.


Desdechado   (2006-06-21 16:31:00) [2]

> responce : pchar
Это, видимо, указатель на память для помещения в него ответа. Выделил ли ты эту память для ответа заранее?


Zilog   (2006-06-21 15:20:00) [3]

UINT - тип данных, беззнаковое целое число, разрядностью 32-бит
PCHAR - непонятго, то ли это pchar, то ли указатель, судя по мануалу... :(


Zilog   (2006-06-21 15:18:00) [4]

незнаю  где я увидел stdcall, но без него при запуске вываливаешься сразу в дебаггер... а с ним, всего лишь Access Violation... :) (а один-два раза даже работало как-то...)


Ega23   (2006-06-21 15:10:00) [5]


> Как её описал я:
>
> function GetResponseExA(dwDevice : cardinal; responce :
> pchar; maxchar  : cardinal; command  : pchar) : cardinal;
>  stdcall external 'pcomm32.dll';


Почему ты опять указываешь stdcall? Где ты его увидел???
Что такое PCHAR и UINT?


Zilog   (2006-06-21 15:01:00) [6]

Господа знатоки, обьясните, пожалуйста, что я сделал не так.

Описание функции в мануале:


long GetResponseExA(DWORD dwDevice,PCHAR response,UINT maxchar,PCHAR command);


dwDevice Device number.
response Pointer to string buffer to copy the DVC's response into.
maxchar Maximum characters to copy.
command Pointer to NULL terminated string to be sent to the DVC as a question/command.

Как её описал я:

function GetResponseExA(dwDevice : cardinal; responce : pchar; maxchar  : cardinal; command  : pchar) : cardinal; stdcall external 'pcomm32.dll';

вызываю вот так:

var resp : pchar;
...
GetResponseExA(0,resp,255,'ver');
ListBox1.Items.Add(resp);


не работает. вернее был один момент, когда сработало, но я, видимо, что-то успел намудрить....

зы. в описании сказано, что параметры response,command - указатели. Пробовал описывать и по другому, при вызове указывая в качестве аргуметов указатели, но тоже не сработало.


Джо   (2006-06-21 00:56:00) [7]

> так что сорри, не понял твоего вопроса.

В смысле, не понял тогда :)


Джо   (2006-06-21 00:56:00) [8]

> [8] Ega23 ©   (20.06.06 19:11)
> ...я про саму процедуру Test.
> Зачем автор её в Delphi описал как stdcall? Да ещё и как
> far?

А, я даже не посмотрел выше, только перевел, как понимаю, процедурный тип, так что сорри, не понял твоего вопроса.


begin...end   (2006-06-20 19:32:00) [9]

> Ega23 ©   (20.06.06 19:11) [8]

Тогда сорри. Я думал, у тебя насчёт WINAPI были сомнения.


Ega23   (2006-06-20 19:11:00) [10]


> #define WINAPI      __stdcall


Лёш, где здесь WINAPI?
LONG Test(параметры);
В параметрах? Ну и пёс с ними, я про саму процедуру Test.
Зачем автор её в Delphi описал как stdcall? Да ещё и как far?

function Test(dwDevice : word; msgp : DPRTESTMSGPROC; prgp : DPRTESTPROGRESS) : double; far; stdcallexternal 'mydll.dll';


begin...end   (2006-06-20 18:53:00) [11]

> Ega23 ©   (20.06.06 18:24) [4]

#define WINAPI      __stdcall


Ega23   (2006-06-20 18:46:00) [12]


> Дык WINAPI жеж.


И что?
LONG Test(DWORD dwDevice, DPRTESTMSGPROC msgp, DPRTESTPROGRESS prgp);
Хочешь сказать, что это всегда stdcall?
(Это не наезд, я с WinAPI мало знаком, просто интересно)...


Джо   (2006-06-20 18:28:00) [13]

> [4] Ega23 ©   (20.06.06 18:24)
> А вы уверены, что stdcall, а не cdecl?

Дык WINAPI жеж.


Ega23   (2006-06-20 18:24:00) [14]

А вы уверены, что stdcall, а не cdecl?


Desdechado   (2006-06-20 18:10:00) [15]

если не ошибаюсь, и другие типы тебе тоже неизвестны:
LONG - это LONG INT (т.е. Integer), а не Double
DWORD - это DWord, а не Word

да и far не нужен


Джо   (2006-06-20 18:03:00) [16]

type
 TDprTestMsgProc = procedure (NumErrors: Cardinal; Action: PChar; CurrentOffset: Cardinal); stdcall;

если не ошибаюсь...


Джо   (2006-06-20 18:03:00) [17]

type
 TDprTestMsgProc = procedure (NumErrors: Cardinal; Action: PChar; CurrentOffset: Cardinal); stdcall;

если не ошибаюсь...


Наверх

Титульная страница Поиск, карта сайта Написать письмо