Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как работать с библиотекой из VB
|
|||
|---|---|---|---|
|
#18+
Есть библиотека как я понял на писанная на C++, так как я С++ знаю хуже чем VB хочу просто взять функции из библиотеки для работы В ней есть следующие функии.. int MtGetVersion( void ); - возращает номер версии. int MtSetWorkingDirectory( const char * path ); - устанавливает рабочую директорию. и д.т. В обшем проблема состоит в чем каогда я хочу установить какой нибудь парамет в данном случае указать дерикторию он мне говорит : не правельный вызов функции. А без передачи данных работает нормально то есть номер версии он показавает нормально вчем проблема помогите разобраться... Ниже приведен код на VB Public Declare Function MtGetVersion Lib "mtapi.dll" () As Long Public Declare Function MtSetWorkingDirectory Lib "mtapi.dll" (ByVal paths As String) As Long Public Sub StartPog() t = MtGetVersion() t=MtSetWorkingDirectory ("c:\") ' - здесь выдает ошибку End Sub На всякий случай прикрепляю библиотеку.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 07:56 |
|
||
|
Как работать с библиотекой из VB
|
|||
|---|---|---|---|
|
#18+
Вот на всякий случай описания функций: MetaTrader application program interface. Весь API состоит из 29 функций, реализованных в mtapi.dll. Доступ к функциям API осуществляется так, как это показано в исходном файле MetaTraderAPI.cpp. Описания функций, а также необходимых структур данных, находятся в файле MetaTraderAPI.h. Для статической линковки имеются файлы mtapi.lib и mtapi.h. int MtGetVersion( void ); Возвращает номер версии MTAPI в виде составного числа, первые 3 цифры которого представляют собой номер версии клиентского терминала, совместимого с API. Младшие 3 цифры представляют собой версию API. int MtSetWorkingDirectory( const char * path ); Назначение рабочего директория, в котором будут храниться log-файлы, приходящие от сервера письма, а также некоторые другие рабочие файлы. В качестве параметра необходимо указать существующий директорий. Если в качестве параметра указать NULL, то рабочим директорием будет назначен тот, из которого запущен exe-файл клиента (по умолчанию рабочим директорием считается директорий, содержащий mtapi.dll.). Возвращает код возврата. Коды возврата описаны в файле MetaTraderAPI.h. int MtCreate( void ); Создание объекта сокета для связи с сервером MetaTrader. Возвращает хэндл открытого сокета (внутренний номер сокета) в случае успеха. Либо –1 в случае ошибки. Имеется ограничение на количество одновременно существующих объектов сокетов. int MtDelete( const int handle ); Удаление ранее созданного объекта сокета. В качестве параметра передаётся хэндл, ранее полученный функцией создания объекта сокета. Возвращает код возврата. int MtConnect( const int handle, const char *server, const int port ); Установление связи с сервером. Параметры: handle – хэндл сокета, через который необходимо установить связь; server – интернетовский адрес сервера (IP-address или domain name); port – номер порта. Для MetaTrader сервера – это 1950. Возвращает код возврата. int MtDisconnect( const int handle ); Разрыв ранее установленной связи с сервером. В качестве параметра передаётся хэндл сокета. Возвращает код возврата. int MtLogin( const int handle, const int login, const char *password ); Запрос серверу на подключение в качестве авторизованного клиента. handle – хэндл сокета, через который уже установлена связь с сервером; login – номер клиента (фактически номер счёта, которым управляет данный клиент); password – пароль для входа в систему. Возвращает код возврата. int MtOpenDemoAccount( const int handle, DemoAccountInfo *info ); Запрос серверу на открытие тренировочного (демонстрационного) счёта и получение права на управление этим счётом. handle – хэндл сокета, через который уже установлена связь с сервером; info – адрес переменной типа структуры DemoAccountInfo, в которой заполнены необходимые для регистрации на сервере поля. Пример заполнения структуры прилагается. Возвращает код возврата. В случае успешного выполнения функции номер счёта и пароль для входа в систему будут записаны в поля login и password структуры DemoAccountInfo по адресу info. int MtChangePassword( const int handle, const char *newpass ); Запрос серверу на смену текущего пароля. handle – хэндл сокета, через который уже установлена связь с сервером и произведён вход в систему в качестве авторизованного клиента; newpass – новый пароль для следующего входа в систему. Возвращает код возврата. RateInfo* MtGetRates( const int handle, const char *symbol, const int period, const time_t lasttime, int *counter ); Запрос серверу на получение истории котировок. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; symbol – наименование инструмента, по которому необходимо получить котировки; period – период котировок. В файле MetaTraderAPI.h описаны возможные значения: PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1 (то есть минутки, пятиминутки … недельки); lasttime – время (в секундах с 1 января 1970 г), начиная с которого интересуют котировки; counter – адрес переменной типа int, куда будет записано количество возвращаемых котировок. Возвращает массив структур RateInfo с котировками размером *counter, либо NULL в случае неудачи. Массив котировок должен быть освобождён при помощи функции HeapFree( GetProcessHeap(), 0, pRates ); int MtGetTrades( const int handle ); Запрос серверу на получение списка открытых позиций. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента. Список открытых позиций, полученный от сервера, запоминается в объекте сокета и может быть получен при помощи функции MtGetTradeRecords. Возвращает код возврата. TradeRecord* MtGetTradeRecords( const int handle, BriefUserInfo *bui, int *items ); Получение списка открытых позиций. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; bui – адрес переменной типа структуры BriefUserInfo, куда будет записана информация о клиенте (см. описание структуры в файле MetaTraderAPI.h); items – адрес переменной типа int, куда будет записано количество открытых позиций. Возвращает массив структур TradeRecord, содержащий список открытых позиций. Массив открытых позиций должен быть освобождён при помощи функции HeapFree. TradeRecord* MtGetTradeHistory( const int handle, const time_t from, const time_t to, int *items ); Запрос серверу на получение истории торговых операций. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; from, to – диапазон времени (в секундах с 1 января 1970 г), в пределах которого интересуют проведённые торговые операции по данному счёту. items – адрес переменной типа int, куда будет записано количество торговых операций. Возвращает массив структур TradeRecord, содержащий историю торговых операций. Либо NULL в случае неудачи. Массив торговых операций должен быть освобождён при помощи функции HeapFree. char* MtGetNewsBody( const int handle, const int key ); Запрос серверу на получение новости по её номеру. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; key – номер новости. Возвращает символьную строку, содержащую новость, либо NULL в случае неудачи. Строка, содержащая новость должна быть освобождена при помощи функции HeapFree. int MtGetPrices( const int handle, const char *symbol, const int lots, double *bid, double *ask ); Запрос серверу на получение цен по указанному инструменту. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; symbol – наименование инструмента, по которому необходимо получить цены; lots – количество лотов, умноженное на 100; bid – адрес переменной типа double, в которую будет записана цена bid; ask – адрес переменной типа double, в которую будет записана цена ask; Возвращает код возврата. Необходимое замечание. Если инструмент, по которому запрашиваются цены, находится в режиме Instant Execution, то необходимо просто брать последние котировки по запрашиваемому инструменту. Как определить инструмент, который находится в режиме Instant Execution. В массиве структур ConSecurity, который может быть получен функцией MtGetSecurities, соответствующий инструмент имеет в поле exemode значение EXE_MARKET. int MtSendOrder( const int handle, const SendOrderInfo *soi ); Запрос серверу на открытие позиции либо на выставление «отложенного» ордера. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; soi – адрес переменной типа структуры SendOrderInfo, в которой клиент должен заполнить необходимые поля (пример прилагается). Список ордеров может быть получен при помощи вызова MtGetTrades и MtGetTradeRecords. Если же сокет был переведён в режим подкачки данных, то список ордеров обновится автоматически и получить его можно при помощи MtGetTradeRecords (без предварительного вызова MtGetTrades!). Возвращает код возврата. int MtDeleteOrder( const int handle, const int order ); Запрос серверу на удаление «отложенного» ордера. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; order – номер отложенного ордера. Возвращает код возврата. int MtModifyOrder (const int handle, const int order, const double price, const double sl, const double tp ); Запрос серверу на изменение характеристик ордера. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; order – номер ордера; price – новое значение цены; sl – новое значение Stop Loss; tp – новое значение Take Profit. Возвращает код возврата. int MtCloseOrder( const int handle, const int order, const double price, const int volume ); Запрос серверу на закрытие позиции. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; order – номер ордера; price – цена; volume – размер закрываемой позиции (возможно частичное закрытие позиции – появится новый ордер с незакрытым объёмом). Возвращает код возврата. int MtCloseByOrder( const int handle, const int order, const int byorder ); Запрос серверу на закрытие одной открытой позиции другой открытой позицией по этому же инструменту, но противоположного направления. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; order – номер закрываемого ордера; byorder – номер закрывающего ордера. Возвращает код возврата. int MtRefreshSecurities( const int handle ); Запрос серверу на обновление списка доступных инструментов. Данная функция работает с файлом securities.dat, создающемся в рабочем директории. Наличие этого файла с актуальным списком инструментов позволяет значительно снизить трафик в процессе обновления списка. Полученный список доступных инструментов записывается в файл, а также хранится в объекте сокета и может быть запрошен функцией MtGetSecurities. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента. Возвращает код возврата. ConSecurity* MtGetSecurities( const int handle, int *items ); Получение списка доступных инструментов. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; items – адрес переменной типа int, куда будет записано количество доступных инструментов. Возвращает массив структур ConSecurity, содержащий список доступных инструментов. Массив доступных инструментов должен быть освобождён при помощи функции HeapFree. int MtAddSymbol( const int handle, const char * symbol ); Добавить инструмент в список выбранных инструментов для получения котировок в режиме подкачки данных. Список выбранных инструментов хранится в объекте сокета. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; symbol – наименование добавляемого инструмента. Возвращает код возврата. int MtHideSymbol( const int handle, const char * symbol ); Удалить инструмент из списка выбранных инструментов для получения котировок в режиме подкачки данных. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; symbol – наименование удаляемого инструмента. Возвращает код возврата. int MtSetPumpingMode( const int handle, const HWND destwnd, const UINT eventmsg ); Запрос серверу на перевод клиента в режим подкачки данных (пассивный режим). Этот режим предполагает уменьшение трафика, так как сервер без дополнительного запроса клиента будет посылать новые данные, относящиеся к клиенту. Этот режим предполагает более оперативное получение данных – котировок, новостей, изменения состояния открытых позиций, изменения состояния счёта. Важно! После перевода объекта сокета в режим подкачки данных недопустимо обращаться к серверу через данный сокет с запросами, кроме запроса на разрыв связи MtDisconnect. Можно вызывать следующие функции: MtGetTradeRecords, MtGetSecurities, MtAddSymbol, MtHideSymbol, MtGetUpdatedTickInfo, MtGetLastNews, MtGetLastMail. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; destwnd – хэндл окна, которому будут приходить сообщения о поступлении новых данных от сервера; eventmsg – идентификатор сообщения, которое будет посылаться окну. В качестве параметра WPARAM может быть передано одно из значений: UPDATE_BIDASK, UPDATE_NEWS, UPDATE_TRADES, UPDATE_MAIL или END_PUMPING (описаны в файле MetaTraderAPI.h). В качестве параметра LPARAM передаётся хэндл объекта сокета, пославшего сообщение. Возвращает код возврата. TickInfo* MtGetUpdatedTickInfo( const int handle, int *items ); Получение списка последних котировок. Обычно вызывается после поступления события UPDATE_BIDASK. Так как котировки приходят в процессе подкачки данных, то и запрашивать список изменённых котировок следует у того объекта сокета, который находится в режиме подкачки данных, и послал соответствующее сообщение. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; items – адрес переменной типа int, куда будет записано количество котировок. Возвращает массив структур TickInfo, содержащий список котировок. Массив котировок должен быть освобождён при помощи функции HeapFree. NewsTopic* MtGetLastNews( const int handle, int *items ); Получение списка последних новостей. Вызывается после поступления события UPDATE_ NEWS. Список последних новостей следует запрашивать у того объекта сокета, который находится в режиме подкачки данных, и послал соответствующее сообщение. handle – хэндл сокета, через который уже произведён вход в систему в качестве авторизованного клиента; items – адрес переменной типа int, куда будет записано количество котировок. Возвращает массив структур NewsTopic, содержащий список новостей. Массив новостей должен быть освобождён при помощи функции HeapFree. int MtGetLastMail( const int handle, char * path, int *lenofpath ); Получения имени файла, в который было записано пришедшее с сервера письмо. handle – хэндл сокета, переведённого в режим подкачки данных и пославшего сообщение UPDATE_MAIL; path – строка символов для приёма имени файла; lenofpath – адрес переменной типа int, в которой записана длина приёмной строки. Если имя файла (включая завершающий ноль) больше, чем приёмная строка, то в приёмную строку записывается строка нулевой длины, а в переменную по адресу lenofpath записывается длина строки, необходимая для приёма имени файла. Возвращает код возврата. TradeRecord* MtGetTradeRecords( const int handle, BriefUserInfo *bui, int *items ); Эта функция уже описана выше. Необходимое дополнение для объекта сокета, переведённого в режим подкачки данных: список открытых позиций необходимо запрашивать у того объекта сокета, который послал сообщение UPDATE_TRADES. const char* MtGetErrorDescription( const int errorcode ); Возвращает символьное описание ошибки. В качестве параметра используется код возврата от какой-либо вышеописанной функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 07:57 |
|
||
|
Как работать с библиотекой из VB
|
|||
|---|---|---|---|
|
#18+
Если есть возможность, найди книгу: ISBN 5-94074-102-9 Роман С. Программирование в Win32 API на Visual Basic. Пер. с англ. - М.: ДМК Пресс, 2001. - 480 с.:ил. (Серия "Для программистов"). Раздел "Преобразование строк в VB" (стр.105-111) Раздел "Передача строк в Win32 API" (стр.111-123). Там приведена технология, которая решает твою проблему. P.S. Книжка в мягком переплёте со следующими словами: Использование преимуществ системных сервисов Windows Программирование в Win32 API на Visual Basic. (штриховой рисунок обезьяны - наверное, нас имеют ввиду) O'REILLY Стивен Роман - часто визуальный образ позволяет быстрее найти искомое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 12:48 |
|
||
|
Как работать с библиотекой из VB
|
|||
|---|---|---|---|
|
#18+
Я бы все-таки посоветовал книгу "Win32 API и Visual Basic" Dan Applman. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 15:10 |
|
||
|
Как работать с библиотекой из VB
|
|||
|---|---|---|---|
|
#18+
Magnus, это точно, Эпплман со своими Win32API - это bible API в VB, 1114 страниц, нечего сказать :) Продам(в Одессе). ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 16:16 |
|
||
|
Как работать с библиотекой из VB
|
|||
|---|---|---|---|
|
#18+
Там конечно не полный справочник функций, полного наверное и не существует, но книга дает очень хорошее понимание того как все это работает, как чего вызывать и зачем, где что писать и как сделать чтоб это еще и работало :). Именно понимание. Можно использовать и как справочник, но главное понять. Magnus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 16:24 |
|
||
|
Как работать с библиотекой из VB
|
|||
|---|---|---|---|
|
#18+
B Visual Basic возможен вызов функций Dlls которые объявлены с использованием __stdcall. Похоже, что в этой dll он не использован. Короче говоря, низя с ней из VB на прямую работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 17:23 |
|
||
|
Как работать с библиотекой из VB
|
|||
|---|---|---|---|
|
#18+
Valerik не правельный вызов функции Структура API DLL в общем случае должна включать точки входа для обработки как ANSI-, так и Unicode'овых строк. То, что мы привыкли видеть в объявлении API-функций, как Alias с добавлением литеры A в конце имени функции, и есть алиасный вызов с предполагаемой ANSI-кодировкой строк параметров. VB работает с UNICODE, однако в API передаёт ANSI-шный вариант строки. В используемой Вами dll-ке такие алиасы не предусмотрены (см. её структуру в Dependency Walker for Win32 (Intel x86)), поэтому и возникает ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 17:48 |
|
||
|
Как работать с библиотекой из VB
|
|||
|---|---|---|---|
|
#18+
А как насчет Дельши ? Она будет с этой ДЛЛ работать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 19:33 |
|
||
|
Как работать с библиотекой из VB
|
|||
|---|---|---|---|
|
#18+
2 Автор. А если не секрет, что за прогу ты пишешь? Ведь если я не ошибаюсь МетаТрейдер это программа для работы с ForeXом (не самая пантовая), но очень удобная (сам на ней учился). (Возможно с другими подобными прогами будет удобнее работать через VB) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2004, 08:49 |
|
||
|
Как работать с библиотекой из VB
|
|||
|---|---|---|---|
|
#18+
В общем эта прога мне нужна только пока для экспорта котировок, что бя не сам мучался а все делалось программно, ну а птом в дальнейшем возможен вариант и автомалического раставления ордеров. Вот в принципе и все если вы знатие другие проги которые работают с VB и подерживали бы программный экспорт котировок буду вам только признателен за подсказку, а то что то мне не хочеться Дельфи изучать.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2004, 06:23 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=32637350&tid=2169099]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 347ms |

| 0 / 0 |
