Вниз
Скачать: CL | DM;

использование внешней библиотеки   Найти похожие ветки 

← →
Zilog ©   (2006-06-20 17:57) [0]

из описания к 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);

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


← →
Джо ©   (2006-06-20 18:03) [1]

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

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


← →
Джо ©   (2006-06-20 18:03) [2]

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

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


← →
Desdechado ©   (2006-06-20 18:10) [3]

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

да и far не нужен


← →
Ega23 ©   (2006-06-20 18:24) [4]

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


← →
Джо ©   (2006-06-20 18:28) [5]

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

Дык WINAPI жеж.


← →
Ega23 ©   (2006-06-20 18:46) [6]


> Дык WINAPI жеж.


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


← →
begin...end ©   (2006-06-20 18:53) [7]

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

#define WINAPI      __stdcall


← →
Ega23 ©   (2006-06-20 19:11) [8]


> #define WINAPI      __stdcall


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

function Test(dwDevice : word; msgp : DPRTESTMSGPROC; prgp : DPRTESTPROGRESS) : double; far; stdcall external "mydll.dll";


← →
begin...end ©   (2006-06-20 19:32) [9]

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

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


← →
Джо ©   (2006-06-21 00:56) [10]

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

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


← →
Джо ©   (2006-06-21 00:56) [11]

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

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


← →
Zilog ©   (2006-06-21 15:01) [12]

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

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


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 - указатели. Пробовал описывать и по другому, при вызове указывая в качестве аргуметов указатели, но тоже не сработало.


← →
Ega23 ©   (2006-06-21 15:10) [13]


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


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


← →
Zilog ©   (2006-06-21 15:18) [14]

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


← →
Zilog ©   (2006-06-21 15:20) [15]

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


← →
Desdechado ©   (2006-06-21 16:31) [16]

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


← →
Ega23 ©   (2006-06-21 16:31) [17]


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


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



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.025 c
15-1151649881
MBo
2006-06-30 10:44
2006.07.30
Пятничные похождения Васи Пупкина и другие задачки ;)


15-1151478857
learner
2006-06-28 11:14
2006.07.30
Автоматическая авторизация в домашней локальной сети


3-1148803253
Ivan123
2006-05-28 12:00
2006.07.30
как увидеть messages от SQL-server


4-1144999322
SP_MX
2006-04-14 11:22
2006.07.30
Клавиатурный HOOK


1-1150550494
lux_dn
2006-06-17 17:21
2006.07.30
Утечка ПАМЯТИ & DLL




   Наверх