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

Вниз

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

 
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 вся ветка

Форум: "Основная";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.014 c
2-1152271204
Crazy monkey
2006-07-07 15:20
2006.07.30
2 Вопроса по TreeView


1-1150560642
Avgust
2006-06-17 20:10
2006.07.30
таймер в сервисе или как его включить-выключить???


2-1152628408
AlexanderMS
2006-07-11 18:33
2006.07.30
Форма "сворачивается".


15-1152050166
Footballer
2006-07-05 01:56
2006.07.30
Зацините audioplayer


15-1151668888
PSPF2003
2006-06-30 16:01
2006.07.30
Мертвые ссылки





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский