Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   помогите пожалуйста разобраться с DLL (http://forum.oszone.net/showthread.php?t=131347)

silverston 08-02-2009 12:11 1032641

помогите пожалуйста разобраться с DLL
 
Есть библиотека для соединения с программой Quik
1.1.Функция TRANS2QUIK_CONNECT

Назначение: функция используется для установления связи библиотеки TRANS2QUIK_Pr.dll с терминалом QUIK.

Синтаксис:
long TRANS2QUIK_CONNECT(LPCSTR lpcstrConnectionParamsString, long* pnExtendedErrorCode, LPSTR lpstrErrorMessage, DWORD dwErrorMessageSize) Описание:

Result
Тип Long. Возвращаемое число может принимать следующие значения:
TRANS2QUIK_SUCCESS - соединение установлено успешно.
TRANS2QUIK_QUIK_TERMINAL_NOT_FOUND - в указанном каталоге либо отсутствует INFO.EXE, либо у него не запущен сервис обработки внешних*подключений, в* pnExtendedErrorCode в этом случае передается 0.
TRANS2QUIK_DLL_VERSION_NOT_SUPPORTED - используемая версия Trans2QUIK.DLL указанным INFO.EXE не поддерживается, в pnExtendedErrorCode в этом случае передается 0.
TRANS2QUIK_DLL_ALREADY_CONNECTED - соединение уже установлено, в pnExtendedErrorCode в этом случае передается 0.
TRANS2QUIK_FAILED - произошла ошибка при установлении соединения, в pnExtendedErrorCode в этом случае передается дополнительный код ошибки.
lpcstrConnectionParamsString
Тип: Строка. Полный путь к каталогу, в котором установлен INFO.EXE, с которым устанавливаем соединение.
pnExtendedErrorCode
Тип: указатель на переменную типа Long. В случае возникновения ошибки может содержать расширенный код ошибки.
lpstrErrorMessage
Тип: указатель на переменную типа Строка. В случае возникновения ошибки может получать сообщение о возникшей ошибке.
dwErrorMessageSize
Тип: Long. Содержит длину строки, на которую ссылается указатель lpstrErrorMessage.
Задача-с помощью скрипта на Autoit соединиться с программой через библиотеку и получить ответ,что соединились или нет.
Делаю следующий код:
[code]

Dim $a, $Path_Quik, $pnExtendedErrorCode, $mesEr, $er, $lpstrErrorMessage, $dwErrorMessageSize, $pnExtendedErrorCode, $dwErrorMessageSize, $dll, $d

$Path_Quik = "C:\Quik5\" ;определяю путь к программе quik
$dll = DllOpen("trans2quik.dll"); вызываю библиотеку
DllCall($dll, "long*", "TRANS2QUIK_CONNECT", "str", $Path_Quik, "str", $pnExtendedErrorCode, "str", $lpstrErrorMessage, "dword", $dwErrorMessageSize);вызываю функцию TRANS2QUIK_CONNECT
MsgBox(1, "Вывод", $lpstrErrorMessage); Вывожу результат

Однако получаю пустое сообщение вместо сообщения со значением переменной $lpstrErrorMessage

Помогите разобраться с вызовом и работой с функциями dll.

Creat0R 08-02-2009 12:28 1032655

Цитата:

Цитата silverston
lpstrErrorMessage
Тип: указатель на переменную типа Строка »

Насколько я понимаю, тут требуется создание структуры:

Код:

;Создаём структуры
$stExtErrCode = DllStructCreate("long")
$pnExtendedErrorCode = DllStructGetPtr($stExtErrCode)

$stErrMessage = DllStructCreate("str")
$lpstrErrorMessage = DllStructGetPtr($stErrMessage)

$dwErrorMessageSize = DllStructGetSize($stErrMessage)

$Path_Quik = "C:\Quik5\" ;Определяю путь к программе quik
$dll = DllOpen("trans2quik.dll") ;Вызываю библиотеку

DllCall($dll, "long", "TRANS2QUIK_CONNECT", _ ;Вызываю функцию TRANS2QUIK_CONNECT
    "str", $Path_Quik, _
    "ptr", $pnExtendedErrorCode, _
    "ptr", $lpstrErrorMessage, _
    "dword", $dwErrorMessageSize)

MsgBox(1, "Вывод", DllStructGetData($stErrMessage, 1)); Вывожу результат

А также возможно понадобится и заполнение структур...

silverston 08-02-2009 18:28 1032940

Посмотрел в гугле на предмет создания структур в Autoit, ничего не нашел. Поделитесь ссылкой пожалуйста.
UPD:А гугл,кстати,первой строкой в результатах поиска ссылается на этот форум и эту ветку :-()

Creat0R 08-02-2009 18:46 1032951

Цитата:

Цитата silverston
Посмотрел в гугле на предмет создания структур в Autoit »

А почему в гугле, превое место где нужно искать аутоитовские пренадлежности, это его же справка ;).

silverston 09-02-2009 04:38 1033268

Для чего служат структуры?Никогда не встречал таких конструкций,может быть потому,что опыт в программировании невелик,тем более,с DLL сталкиваюсь в первый раз.

Creat0R 09-02-2009 14:16 1033543

Цитата:

Цитата silverston
Для чего служат структуры? »

Для строения данных. Это позволяет передавать данные более эффективно/надёжно и быстро с одного ммодуля в другой (но не обязательно, структуры можно также использовать вместо стандартных массивов, которые "страдают" ограничением в скорости).


Время: 05:51.

Время: 05:51.
© OSzone.net 2001-2025