Trans2QuikAPI_1.3 - пример для Excel

Страницы: 1
RSS
Trans2QuikAPI_1.3 - пример для Excel, Почему в новой версии Trans2QuikAPI нет примера для Excel и где его взять?
 
Добрый день!

В связи с появлением файла Trans2QuikAPI_1.3.rar возникли вопросы:

1) dll-64 будет работать только с QUIK версии 7 и выше?
2) Где взять пример работы с dll-64 из Excel?
3) В версии 1.2 была директория Sample_Excel, в версии 1.3 ее нет – почему (?) и если тут какой-то негатив для перспектив тех кто работает с вашей программой из Excel?
 
Цитата
guest_sl пишет:
1) dll-64 будет работать только с QUIK версии 7 и выше?
Да
Цитата
guest_sl пишет:
2) Где взять пример работы с dll-64 из Excel?
он такой же как для х32
Цитата
guest_sl пишет:
3) В версии 1.2 была директория Sample_Excel, в версии 1.3 ее нет – почему (?) и если тут какой-то негатив для перспектив тех кто работает с вашей программой из Excel?
Возьмите пример из 1.2
 
Не понятно: имя dll-файла не изменилось, при этом новый архив (просто новой версии, не новый продукт) содержит только одну версию trans2quik.dll
Она теперь будет только всегда 64-х битная? или как?
т.е. не понятно как две версии будут сосуществовать теперь "по жизни".
 
Цитата
Sergey Gorokhov пишет:
Возьмите пример из 1.2
Спасибо за информацию.
 
а для невиндовса на джаве будет библиотека?
вроде с шарпом это недалеко
 
Цитата
Alex Dronov пишет:
а для невиндовса на джаве будет библиотека?
вроде с шарпом это недалеко
Можно попдробнее: для какого именно невиндовса? и какую именно библиотеку на джаве?
 
А 32-разрядной версии 1.3 не будет что ли?
 
Цитата
А 32-разрядной версии 1.3 не будет что ли?
В ней содержательно нет ничего нового.
Только другая разрядность.
Так что пользуясь версией 1.2 (если у вас 32-х битное внешнее приложение) вы ничего не теряете в плане функционала.
 
Добрый день!
Перешел с 32-битной dll trans2quik на 64-битную, соответственно и эксель теперь 64-битный (Офис 2016)

В описаниях функций добавил PtrSafe:
Public Declare PtrSafe Function TRANS2QUIK_CONNECT Lib "C:\trans2quik.dll" Alias "_TRANS2QUIK_CONNECT@16" _
   (ByVal lpstConnectionParamsString As String, ByRef pnExtendedErrorCode As Long, _
    ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

Public Declare PtrSafe Function TRANS2QUIK_DISCONNECT Lib "C:\trans2quik.dll" Alias "_TRANS2QUIK_DISCONNECT@12" _
    (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

Public Declare PtrSafe Function TRANS2QUIK_IS_QUIK_CONNECTED Lib "C:\trans2quik.dll" Alias "_TRANS2QUIK_IS_QUIK_CONNECTED@12" _
    (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

Public Declare PtrSafe Function TRANS2QUIK_IS_DLL_CONNECTED Lib "C:\trans2quik.dll" Alias "_TRANS2QUIK_IS_DLL_CONNECTED@12" _
    (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long
   
Public Declare PtrSafe Function TRANS2QUIK_SEND_SYNC_TRANSACTION Lib "C:\trans2quik.dll" Alias "_TRANS2QUIK_SEND_SYNC_TRANSACTION@36" _
   (ByVal lpstTransactionString As String, ByRef pnReplyCode As Long, ByRef pdwTransId As Long, ByRef pdOrderNum As Double, _
    ByVal lpstrResultMessage As String, ByVal dwResultMessageSize As Long, ByRef pnExtendedErrorCode As Long, _
    ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

Public Declare PtrSafe Function TRANS2QUIK_SEND_ASYNC_TRANSACTION Lib "C:\trans2quik.dll" Alias "_TRANS2QUIK_SEND_ASYNC_TRANSACTION@16" _
   (ByVal lpstTransactionString As String, ByRef pnExtendedErrorCode As Long, _
    ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

При вызовах функций выходит ошибка вида
Например при вызове TRANS2QUIK_IS_QUIK_CONNECTED:
Run-Time Error '453'
Can't find DLL entry point _TRANS2QUIK_IS_QUIK_CONNECTED@12 in C:\trans2quik.dll

Подскажите пожалуйста в чем может быть ошибка?
(На Экселе 2003 32-битная dll работала как часы)
 
Добрый день.

Убедитесь, что версия QUIK у Вас не ниже 7.0.
Проверьте работу на наших примерах:
http://arqatech.com/upload/iblock/80a/Trans2QuikAPI_1.3_x64.zip
 
QUIK 7.16.3.14
Проверить работу на ваших примерах не представляется возможным, так как в них нет примера на MS Excel.
Примеры trans2quik версии 1.2 не подходят, поскольку на 64-битной версии MS Excel вызов dll организован несколько иначе, чем на 32-битной  
 
Цитата
Сергей написал:
QUIK 7.16.3.14
Проверить работу на ваших примерах не представляется возможным, так как в них нет примера на MS Excel.
Примеры trans2quik версии 1.2 не подходят, поскольку на 64-битной версии MS Excel вызов dll организован несколько иначе, чем на 32-битной
Пример для Excel версии  trans2quik 1.2 будет работать и для версии  trans2quik 1.3 .
 
Цитата
Egor Zaytsev написал:
Цитата
Сергей   написал:
QUIK 7.16.3.14
Проверить работу на ваших примерах не представляется возможным, так как в них нет примера на MS Excel.
Примеры trans2quik версии 1.2 не подходят, поскольку на 64-битной версии MS Excel вызов dll организован несколько иначе, чем на 32-битной
Пример для Excel версии  trans2quik 1.2 будет работать и для версии  trans2quik 1.3 .
Даже просто при открытии файла из примера  trans2quik 1.2 выходит сообщение об ошибке:

Compile error:
The code in this project must be updated for use on 64-bit systems.
Please review and update Declare statements and then mark them
with the PtrSafe attribute.

Затем открывается текст VBA кода выделенный красным цветом.
Могу выслать принтскрин...
 
Цитата
Сергей написал:
Цитата
Egor Zaytsev   написал:
Цитата
Сергей   написал:
QUIK 7.16.3.14
Проверить работу на ваших примерах не представляется возможным, так как в них нет примера на MS Excel.
Примеры trans2quik версии 1.2 не подходят, поскольку на 64-битной версии MS Excel вызов dll организован несколько иначе, чем на 32-битной
Пример для Excel версии  trans2quik 1.2 будет работать и для версии  trans2quik 1.3 .
Даже просто при открытии файла из примера  trans2quik 1.2 выходит сообщение об ошибке:

Compile error:
The code in this project must be updated for use on 64-bit systems.
Please review and update Declare statements and then mark them
with the PtrSafe attribute.

Затем открывается текст VBA кода выделенный красным цветом.
Могу выслать принтскрин...
Добрый день.

Да, в 64х разрядном Excel работать не будет.
Возвращаемся в к первоначальной ошибки. Пришлите полный код, который вы загружаете.
 
    Public PathToInfo As String = "C:\QUIK\"
   Public Const dwErrorMessageSize As Long = 250
   Public Const dwResultMessageSize As Long = 250
   Dim FunctionResult As Long
   Dim FunctionResultString As String
   Dim pnExtendedErrorCode As Long
   Dim lpstrErrorMessage As String * 250
   Dim nReturnCode As Long
   Dim dwTransID As Long
   Dim dordernum As Double
   Dim lpstrResultMessage As String * 250
   Dim TransStr As String

Public Declare PtrSafe Function TRANS2QUIK_CONNECT Lib "C:\trans2quik.dll" Alias "_TRANS2QUIK_CONNECT@16" _
   (ByVal lpstConnectionParamsString As String, ByRef pnExtendedErrorCode As Long, _
    ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

Public Declare PtrSafe Function TRANS2QUIK_DISCONNECT Lib "C:\trans2quik.dll" Alias "_TRANS2QUIK_DISCONNECT@12" _
    (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

Public Declare PtrSafe Function TRANS2QUIK_IS_QUIK_CONNECTED Lib "C:\trans2quik.dll" Alias "_TRANS2QUIK_IS_QUIK_CONNECTED@12" _
    (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

Public Declare PtrSafe Function TRANS2QUIK_IS_DLL_CONNECTED Lib "C:\trans2quik.dll" Alias "_TRANS2QUIK_IS_DLL_CONNECTED@12" _
    (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long
   
Public Declare PtrSafe Function TRANS2QUIK_SEND_SYNC_TRANSACTION Lib "C:\trans2quik.dll" Alias "_TRANS2QUIK_SEND_SYNC_TRANSACTION@36" _
   (ByVal lpstTransactionString As String, ByRef pnReplyCode As Long, ByRef pdwTransId As Long, ByRef pdOrderNum As Double, _
    ByVal lpstrResultMessage As String, ByVal dwResultMessageSize As Long, ByRef pnExtendedErrorCode As Long, _
    ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

Public Declare PtrSafe Function TRANS2QUIK_SEND_ASYNC_TRANSACTION Lib "C:\trans2quik.dll" Alias "_TRANS2QUIK_SEND_ASYNC_TRANSACTION@16" _
   (ByVal lpstTransactionString As String, ByRef pnExtendedErrorCode As Long, _
    ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

Public Sub Connect_Click()
   FunctionResult = TRANS2QUIK_CONNECT(PathToInfo, pnExtendedErrorCode, lpstrErrorMessage, dwErrorMessageSize)
End Sub

Public Sub DisConnect_Click()
   FunctionResult = TRANS2QUIK_DISCONNECT(pnExtendedErrorCode, lpstrErrorMessage, dwErrorMessageSize)
End Sub

Public Sub CheckQuikConnect_Click()
   FunctionResult = TRANS2QUIK_IS_QUIK_CONNECTED(pnExtendedErrorCode, lpstrErrorMessage, dwErrorMessageSize)
End Sub

Public Sub CheckDLLConnect_Click()
   FunctionResult = TRANS2QUIK_IS_DLL_CONNECTED(pnExtendedErrorCode, lpstrErrorMessage, dwErrorMessageSize)
End Sub

Public Sub btn_SendOrderASync_Click()
   TransStr = "ACTION=NEW_ORDER; TRANS_ID=208; CLASSCODE=TQBR; SECCODE=LKOH; ACCOUNT=L01+00000F00; CLIENT_CODE=U1294; TYPE=L; OPERATION=B; QUANTITY=1; PRICE=4000"
   FunctionResult = TRANS2QUIK_SEND_ASYNC_TRANSACTION(TransStr, pnExtendedErrorCode, lpstrErrorMessage, dwErrorMessageSize)
End Sub

Public Sub btn_SendOrderSync_Click()
   TransStr = "ACTION=NEW_ORDER; TRANS_ID=208; CLASSCODE=TQBR; SECCODE=LKOH; ACCOUNT=L01+00000F00; CLIENT_CODE=U1294; TYPE=L; OPERATION=B; QUANTITY=1; PRICE=4000"
   FunctionResult = TRANS2QUIK_SEND_SYNC_TRANSACTION(TransStr, nReturnCode, dwTransID, dordernum, lpstrResultMessage, dwResultMessageSize, pnExtendedErrorCode, lpstrErrorMessage, dwErrorMessageSize)
End Sub

Public Sub btn_SendKillSync_Click()
   TransStr = "ACTION=KILL_ORDER; CLASSCODE=TQBR; SECCODE=LKOH; TRANS_ID=200; ORDER_KEY=" & CStr(Cells(8, 1))
   FunctionResult = TRANS2QUIK_SEND_SYNC_TRANSACTION(TransStr, nReturnCode, dwTransID, dordernum, lpstrResultMessage, dwResultMessageSize, pnExtendedErrorCode, lpstrErrorMessage, dwErrorMessageSize)
End Sub
 
Здравствуйте,

Сергей, попробуйте во всех функция указать следующим образом. Заменить строки типа: _TRANS2QUIK_SEND_ASYNC_TRANSACTION@16 на TRANS2QUIK_SEND_ASYNC_TRANSACTION, заменить _TRANS2QUIK_IS_QUIK_CONNECTED@12 на TRANS2QUIK_IS_QUIK_CONNECTED и так далее по всему коду.
Сообщите результат.
 
Если строки заменить как вы предлагаете, то компилятор автоматически удаляет в коде выражение [Alias "TRANS2QUIK_IS_QUIK_CONNECTED"]  
 
Цитата
Сергей написал:
   (ByVal lpstTransactionString As String, ByRef pnExtendedErrorCode As Long, _
Здравствуйте!

Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
 
Цитата
Сергей написал:
Если строки заменить как вы предлагаете, то компилятор автоматически удаляет в коде выражение [Alias "TRANS2QUIK_IS_QUIK_CONNECTED"]
Добрый день,
    По ряду архитектурных особенностей 64-разрядного Excel существующий     ранее пример использования TRANS2QUIK.DLL работать не будет, поэтому     мы не распространяем его с новой версией библиотеки.
 
Спасибо за разъяснения.
А что посоветуете делать тем, кто использует Excel и trans2quik.dll для своих роботов?
(вариант с текстовым файлом я знаю, но это прошлый век к сожалению)
 
Добрый день!

Цитата
Anastasia Gordienko написал:
По ряду архитектурных особенностей 64-разрядного Excel существующий     ранее пример использования TRANS2QUIK.DLL работать не будет, поэтому     мы не распространяем его с новой версией библиотеки.
Okay, Quik [%-)]... а где тогда можно найти работающий пример использования TRANS2QUIK.DLL в Excel-64? Он существует в природе? Quik вообще работает с Excel-64 через TRANS2QUIK.DLL? Люди же не от праздности интересуются, а для работы... помогите, пожалуйста, с данной информацией...
 
Цитата
rman написал:
Добрый день!
Цитата
Anastasia  Gordienko   написал:
По ряду архитектурных особенностей 64-разрядного Excel существующий     ранее пример использования TRANS2QUIK.DLL работать не будет, поэтому     мы не распространяем его с новой версией библиотеки.
Okay, Quik [%-)]... а где тогда можно найти работающий пример использования TRANS2QUIK.DLL в Excel-64? Он существует в природе? Quik вообще работает с Excel-64 через TRANS2QUIK.DLL? Люди же не от праздности интересуются, а для работы... помогите, пожалуйста, с данной информацией...
Добрый день.

Такого примера в текущий момент нет. Можем зарегистрировать пожелание на доработку.
 
Добрый день!

Цитата
Egor Zaytsev написал:
Такого примера в текущий момент нет. Можем зарегистрировать пожелание на доработку.

Конечно нужно регистрировать на доработку, какие сомнения.
По мне так это и не доработка вовсе, а восстановление привычного состояния - когда есть декларируемая технология/интерфейс работы с программой и есть пример ее использования. Так было всегда, зачем для Excel-64 делать столь негативное исключение...
Excel остается наиболее массовым продуктом с наименее высоким порогом входа в вопросы автоматизации работы на фондовом рынке... именно тут и нужен рабочий пример... люди, пишущие на C++ и т.п. языках в состоянии сами многое понять и решить, а тем, кому доступен только Excel/VBA (а таких людей имхо достаточно много) пример откроет окно возможностей...  
 
Здравствуйте!

Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
 
Добрый день!
Просьба прояснить судьбу данного запроса, сделанного полтора года назад.

1. Есть ли пример использования TRANS2QUIK.DLL в 64-х разрядном excel?
2. TRANS2QUIK.DLL вообще работает с excel x64/VBA, вы хоть раз проверяли?

Последний год у меня проблемы с обработкой в excel данных, поступающих из квик-а. Тормозит экспорт. Хочу попробовать решить эту проблему перейдя на новую x64 версию excel ( с MSOffice2010 ->). Есть надежда, что там используется распараллеливание вычислений и по памяти себя он так не ограничивает.

Пожалуйста ответьте также:
3. Сделали ли вы возможность экспорта по DDE времени сервера?

Я этот запрос делал лет 10 назад, потом видел аналогичный запрос на форуме года 4 назад...

Сегодня вот решил зайти и посмотреть как там с разработкой 64xAPI и обнаружил, что меня уже вообще нет в пользователях форума,
а ведь регистрировался я в начале 2006 года ... :(
 
Здравствуйте.
Цитата
mp65 написал:
1. Есть ли пример использования TRANS2QUIK.DLL в 64-х разрядном excel?
2. TRANS2QUIK.DLL вообще работает с excel x64/VBA, вы хоть раз проверяли?
Вы можете скачать x64 версию библиотеки по следующей ссылке.
К сожалению, для trans2quik.dll x64 пример использования в Excel x64/VBA не представлен. Пример использования trans2quik.dll приведён для x32-версии библиотеки. Также нам известны примеры успешного использования x64-версии библиотеки вместе с x64-версией Excel.
Если у Вас имеются какие-либо конкретные вопросы по использованию API, либо затруднения - просим их сформулировать для дальнейшего разбора.
Цитата
mp65 написал:
3. Сделали ли вы возможность экспорта по DDE времени сервера?
К сожалению, в чистом виде такой возможности не предусмотрено.
Экспорт времени сервера по DDE можно выполнить из таблицы, созданной при помощи lua-скрипта. Для получения значения времени сервера следует использовать функцию getInfoParam("SERVERTIME").
 
Добрый день!

Цитата
Andrey Bezrukov написал:
К сожалению, для trans2quik.dll x64 пример использования в Excel x64/VBA не представлен.
Можно узнать - КЕМ не предоставлен пример использования trans2quik.dll-x64 в Excel-x64?
 
Здравствуйте, rman.

При подготовке дистрибутива модуля API импорта транзакций 1.3 x64 нами не был реализован и добавлен в дистрибутив пример использования данного API совместно с Excel x64/VBA.
 
Дорогие друзья (по несчастью) и разработчики QUIK, приветствую и снова обращаюсь к этому, забытому ARQA Technologies, вопросу.
Может быть баре всё же обратят внимание на нас своих простых смертных пользователей?

Ох уж эта злополучная 64-разрядная trans2quik.dll и Excel!
Ну поясните же нам, как её использовать!
Посмотрел с помощью dumpbin.exe список функций в trans2quik.dll v.1.3
   ordinal hint RVA      name

         1    0 00005EF0 TRANS2QUIK_CONNECT
         2    1 00004F80 TRANS2QUIK_DISCONNECT
         3    2 00005290 TRANS2QUIK_IS_DLL_CONNECTED
...
а было в версии от 03.04.2013
   ordinal hint RVA      name

         1    0 00003F50 _TRANS2QUIK_CONNECT@16
         2    1 00004290 _TRANS2QUIK_DISCONNECT@12
         3    2 00004560 _TRANS2QUIK_IS_DLL_CONNECTED@12


Понятно, что вы поменяли имена функций ddl-ке с, для примера:
_TRANS2QUIK_DISCONNECT@12"  -> TRANS2QUIK_DISCONNECT

Переделал описания для 64 разрядов (VBA Excel 2024), пробовал 2 варианта:
       Private Declare PtrSafe Function TRANS2QUIK_DISCONNECT Lib "Q:\trans2quik.dll" _
           (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long
и
       Private Declare PtrSafe Function TRANS2QUIK_DISCONNECT Lib "Q:\trans2quik.dll" _
           (ByRef pnExtendedErrorCode As LongPtr, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As LongPtr) As Long

Ну не находит Excel VBA эту функцию, останавливается при исполнении кода с ошибкой:
Compile error: Sub or Function not defined!
на строке
lRes = TRANS2QUIK_DISCONNECT(pnExtendedErrorCode, lpstrErrorMessage, dwErrorMessageSize)
то же самое происходит и с другими, необходимыми для работы, функциями :(
Очень похоже, что эта dll-ка как-то не подсоединяется, может заголовок её не так сформирован, или что другое?

Уважаемые разработчики, подскажите, что исправлять/делать?
Окажите уважение к пользователям, которые вот уже более 20 лет пользуются вашей программой.
Приспуститесь с Олимпа!
 
Запустилось, после того, как поменял в описании Private на Public ...

Поделюсь описаниями с теми, кто так и не одолел запуск 64-разрядной версии trans2quik.dll
Нужно просто вставить в код VBA вместо текущего описания функций из библиотеки следующие строки (здесь описаны функции, что я использую):

' Для 64-битной версии Excel (VBA)
#If VBA7 Then
   ' Используется в Excel 2010 и новее
   #If Win64 Then
       ' 64-битная версия
dwErrorMessageSize As LongPtr) As Long
       Public Declare PtrSafe Function TRANS2QUIK_DISCONNECT Lib "Q:\trans2quik.dll" _
           (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long
       
       Public Declare PtrSafe Function TRANS2QUIK_CONNECT Lib "Q:\trans2quik.dll" _
           (ByVal lpstConnectionParamsString As String, ByRef pnExtendedErrorCode As Long, _
            ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

       Public Declare PtrSafe Function TRANS2QUIK_SEND_SYNC_TRANSACTION Lib "Q:\trans2quik.dll" _
           (ByVal lpstTransactionString As String, ByRef pnReplyCode As Long, ByRef pdwTransId As Long, ByRef pdOrderNum As Double, _
            ByVal lpstrResultMessage As String, ByVal dwResultMessageSize As Long, _
            ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

       Public Declare PtrSafe Function TRANS2QUIK_SEND_ASYNC_TRANSACTION Lib "Q:\trans2quik.dll" _
           (ByVal lpstTransactionString As String, ByRef pnExtendedErrorCode As Long, _
            ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long


       Public Declare PtrSafe Function TRANS2QUIK_SET_CONNECTION_STATUS_CALLBACK Lib "Q:\trans2quik.dll" _
           (ByVal pfConnectionStatusCallback As LongPtr, ByRef pnExtendedErrorCode As Long, _
            ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

       Public Declare PtrSafe Function TRANS2QUIK_SET_TRANSACTIONS_REPLY_CALLBACK Lib "Q:\trans2quik.dll" _
           (ByVal pfTransactionReplyCallback As LongPtr, ByRef pnExtendedErrorCode As Long, _
            ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

       Public Declare PtrSafe Function TRANS2QUIK_IS_QUIK_CONNECTED Lib "Q:\trans2quik.dll" _
           (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

       Public Declare PtrSafe Function TRANS2QUIK_IS_DLL_CONNECTED Lib "Q:\trans2quik.dll" _
           (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

       Public Declare PtrSafe Function lstrlen Lib "kernel32.dll" (ByVal lpString As LongPtr) As Long

       Public Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As LongPtr)

   #Else
       ' 32-битная версия (остаётся как была)
       Private Declare Function TRANS2QUIK_SEND_SYNC_TRANSACTION Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_SEND_SYNC_TRANSACTION@36" _
           (ByVal lpstTransactionString As String, ByRef pnReplyCode As Long, ByRef pdwTransId As Long, ByRef pdOrderNum As Double, _
            ByVal lpstrResultMessage As String, ByVal dwResultMessageSize As Long, _
            ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

       Private Declare Function TRANS2QUIK_SEND_ASYNC_TRANSACTION Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_SEND_ASYNC_TRANSACTION@16" _
           (ByVal lpstTransactionString As String, ByRef pnExtendedErrorCode As Long, _
            ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

       Private Declare Function TRANS2QUIK_CONNECT Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_CONNECT@16" _
           (ByVal lpstConnectionParamsString As String, ByRef pnExtendedErrorCode As Long, _
            ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

       Private Declare Function TRANS2QUIK_DISCONNECT Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_DISCONNECT@12" _
           (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

       Private Declare Function TRANS2QUIK_SET_CONNECTION_STATUS_CALLBACK Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_SET_CONNECTION_STATUS_CALLBACK@16" _
           (ByVal pfConnectionStatusCallback As Long, ByRef pnExtendedErrorCode As Long, _
            ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

       Private Declare Function TRANS2QUIK_SET_TRANSACTIONS_REPLY_CALLBACK Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_SET_TRANSACTIONS_REPLY_CALLBACK@16" _
           (ByVal pfTransactionReplyCallback As Long, ByRef pnExtendedErrorCode As Long, _
            ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

       Private Declare Function TRANS2QUIK_IS_QUIK_CONNECTED Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_IS_QUIK_CONNECTED@12" _
           (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

       Private Declare Function TRANS2QUIK_IS_DLL_CONNECTED Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_IS_DLL_CONNECTED@12" _
           (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

       Private Declare Function lstrlen Lib "kernel32.dll" (ByVal lpString As Long) As Long

       Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

   #End If
#Else
   ' Для старых версий VBA (до Excel 2007), но сейчас почти не используется
   Private Declare Function TRANS2QUIK_SEND_SYNC_TRANSACTION Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_SEND_SYNC_TRANSACTION@36" _
       (ByVal lpstTransactionString As String, ByRef pnReplyCode As Long, ByRef pdwTransId As Long, ByRef pdOrderNum As Double, _
        ByVal lpstrResultMessage As String, ByVal dwResultMessageSize As Long, _
        ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

   ' ... (остальные аналогично, но можно опустить, если не нужно поддерживать старые версии)
#End If
 
Получилось так, что я работал в Excel VBA 2010, в коде функции из библиотеки были описаны как Private, но использовались они в другом модуле - и успешно. А вот Excel VBA 2024 посчитал, что это нехорошо.
 
Для того, чтобы заставить пример для trans2quik.dll заработать в 64-разрядной версии Excel нужно просто заменить описание функций из библиотеки в файле-примере.
По шагам:
1. копируем 64-разрядную версию библиотеки trans2quik.dll в нужное нам место, пусть это будет, как у меня, корень драйва Q:.
2. Открываем файл с примером и заменяем описание функций в VBA-коде на:
Код
'Для версий Excel VBA от 2010
#If VBA7 Then
    ' Для 64-битной версии Excel (VBA)
    Public Declare PtrSafe Function TRANS2QUIK_DISCONNECT Lib "Q:\trans2quik.dll" _
        (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long
    
    Public Declare PtrSafe Function TRANS2QUIK_CONNECT Lib "Q:\trans2quik.dll" _
        (ByVal lpstConnectionParamsString As String, ByRef pnExtendedErrorCode As Long, _
         ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

    Public Declare PtrSafe Function TRANS2QUIK_SEND_SYNC_TRANSACTION Lib "Q:\trans2quik.dll" _
        (ByVal lpstTransactionString As String, ByRef pnReplyCode As Long, ByRef pdwTransId As Long, ByRef pdOrderNum As Double, _
         ByVal lpstrResultMessage As String, ByVal dwResultMessageSize As Long, _
         ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

    Public Declare PtrSafe Function TRANS2QUIK_SEND_ASYNC_TRANSACTION Lib "Q:\trans2quik.dll" _
        (ByVal lpstTransactionString As String, ByRef pnExtendedErrorCode As Long, _
         ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long


    Public Declare PtrSafe Function TRANS2QUIK_SET_CONNECTION_STATUS_CALLBACK Lib "Q:\trans2quik.dll" _
        (ByVal pfConnectionStatusCallback As LongPtr, ByRef pnExtendedErrorCode As Long, _
         ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

    Public Declare PtrSafe Function TRANS2QUIK_SET_TRANSACTIONS_REPLY_CALLBACK Lib "Q:\trans2quik.dll" _
        (ByVal pfTransactionReplyCallback As LongPtr, ByRef pnExtendedErrorCode As Long, _
         ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

    Public Declare PtrSafe Function TRANS2QUIK_IS_QUIK_CONNECTED Lib "Q:\trans2quik.dll" _
        (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

    Public Declare PtrSafe Function TRANS2QUIK_IS_DLL_CONNECTED Lib "Q:\trans2quik.dll" _
        (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

    Public Declare PtrSafe Function lstrlen Lib "kernel32.dll" (ByVal lpString As LongPtr) As Long
    Public Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As LongPtr)

#Else
    ' 32-битная версия Excel
    Private Declare Function TRANS2QUIK_SEND_SYNC_TRANSACTION Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_SEND_SYNC_TRANSACTION@36" _
        (ByVal lpstTransactionString As String, ByRef pnReplyCode As Long, ByRef pdwTransId As Long, ByRef pdOrderNum As Double, _
         ByVal lpstrResultMessage As String, ByVal dwResultMessageSize As Long, _
         ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

    Private Declare Function TRANS2QUIK_SEND_ASYNC_TRANSACTION Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_SEND_ASYNC_TRANSACTION@16" _
        (ByVal lpstTransactionString As String, ByRef pnExtendedErrorCode As Long, _
         ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

    Private Declare Function TRANS2QUIK_CONNECT Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_CONNECT@16" _
        (ByVal lpstConnectionParamsString As String, ByRef pnExtendedErrorCode As Long, _
         ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

    Private Declare Function TRANS2QUIK_DISCONNECT Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_DISCONNECT@12" _
        (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

    Private Declare Function TRANS2QUIK_SET_CONNECTION_STATUS_CALLBACK Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_SET_CONNECTION_STATUS_CALLBACK@16" _
        (ByVal pfConnectionStatusCallback As Long, ByRef pnExtendedErrorCode As Long, _
         ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

    Private Declare Function TRANS2QUIK_SET_TRANSACTIONS_REPLY_CALLBACK Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_SET_TRANSACTIONS_REPLY_CALLBACK@16" _
        (ByVal pfTransactionReplyCallback As Long, ByRef pnExtendedErrorCode As Long, _
         ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

    Private Declare Function TRANS2QUIK_IS_QUIK_CONNECTED Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_IS_QUIK_CONNECTED@12" _
        (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

    Private Declare Function TRANS2QUIK_IS_DLL_CONNECTED Lib "Q:\trans2quik.dll" Alias "_TRANS2QUIK_IS_DLL_CONNECTED@12" _
        (ByRef pnExtendedErrorCode As Long, ByVal lpstrErrorMessage As String, ByVal dwErrorMessageSize As Long) As Long

    Private Declare Function lstrlen Lib "kernel32.dll" (ByVal lpString As Long) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
#End If
Теперь, достаточно заменить в коде Q:\ на путь к каталогу, куда положили trans2quik.dll и пример должен заработать в 64 разрядной версии Excel.
Положили 32-разрядную dll-ку и пример готов к работе в 32 разрядной версии Excel.
Страницы: 1
Читают тему
Наверх