Войти

Показать полную графическую версию : помогите пожалуйста разобраться с DLL


silverston
08-02-2009, 12:11
Есть библиотека для соединения с программой 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
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
Посмотрел в гугле на предмет создания структур в Autoit, ничего не нашел. Поделитесь ссылкой пожалуйста.
UPD:А гугл,кстати,первой строкой в результатах поиска ссылается на этот форум и эту ветку :-()

Creat0R
08-02-2009, 18:46
Посмотрел в гугле на предмет создания структур в Autoit »
А почему в гугле, превое место где нужно искать аутоитовские пренадлежности, это его же справка (http://www.autoitscript.com/autoit3/docs/functions/DllStructCreate.htm) ;).

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

Creat0R
09-02-2009, 14:16
Для чего служат структуры? »
Для строения данных. Это позволяет передавать данные более эффективно/надёжно и быстро с одного ммодуля в другой (но не обязательно, структуры можно также использовать вместо стандартных массивов, которые "страдают" ограничением в скорости).




© OSzone.net 2001-2012