Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
вызов функций из сишной dll
|
|||
|---|---|---|---|
|
#18+
Есть сишное описание функции находящейся в dll: int ispSerialize (int memory, ULONG addr, LONG64 sn, UCHAR snBase, string format) Как правильно ее описать для вызова в VBA? Сколько ни пробовал - при попытке выполнения проект вываливается с ошибкой приложения... В Access описываю так: Private Declare Function ispSerialize Lib "AtJniIsp.dll" (ByVal memory As Integer, ByVal addr As Long, ByVal SN As Currency, ByVal snbase As Byte, ByVal format As String) As Integer dll готовая, поменять формат вызова возможности нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 09:55 |
|
||
|
вызов функций из сишной dll
|
|||
|---|---|---|---|
|
#18+
Никак. VBA не поддерживает как минимум LONG64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 11:11 |
|
||
|
вызов функций из сишной dll
|
|||
|---|---|---|---|
|
#18+
> Автор: lints > Есть сишное описание функции находящейся в dll: > int ispSerialize (int memory, ULONG addr, LONG64 sn, UCHAR snBase, string format) Это не полное описание декларации. Нет квалификатора соглашения о вызовах. > Как правильно ее описать для вызова в VBA? Сколько ни пробовал - при попытке выполнения проект вываливается с > ошибкой приложения... В VBA можно вызвать функцию только если функция квалифицированна как stdcall. > dll готовая, поменять формат вызова возможности нет Как вариант, можно написать прокси dll с правильным квалификатором которая, будет вызыватся из VBA и просто вызывать нужную тебе. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 11:14 |
|
||
|
вызов функций из сишной dll
|
|||
|---|---|---|---|
|
#18+
lints, 1) Соглашения вызова? 2) Если прям так и написано - string, и string этот STL-овский, то с такой dll могут быть проблемы даже у других программ на C++, так как они могут использовать другую реализацию STL. Это, скажем так, индусский код. Если деваться некуда, то придётся разбираться с реализацией string в данной версии STL. Antonariy, 64-битный целый как раз Currency (правда, signed). Игорь Горбонос, можно и с __cdecl, но кружным путём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 11:30 |
|
||
|
вызов функций из сишной dll
|
|||
|---|---|---|---|
|
#18+
Игорь ГорбоносВ VBA можно вызвать функцию только если функция квалифицированна как stdcall. Другие функции из этой dll работают (правде в них нет LONG64 и string). Функции в которых строки передаются типа "char * deviceName" работают нормально. В каких-то попытках эта функция не вываливалась с закрытием программы, но строковый параметр она не воспринимала. Значит основные проблемы именно с типом string - как его описать в VB? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 12:55 |
|
||
|
вызов функций из сишной dll
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос> int ispSerialize (int memory, ULONG addr, LONG64 sn, UCHAR snBase, string format) Это не полное описание декларации. Нет квалификатора соглашения о вызовах. Это описание из описания функций dll. Есть пример использования на си. Там описание такое: ATJNIISP_API int STDCALL ispSerialize(int memory, ULONG addr, LONG64 sn, UCHAR snBase, string format); Нигде нет описания в какой кодировке передавать строки - анси или уникод. Есть подозрение, что в dll используется анси - dll буржуйская и функции открытия файлов не роботают с путями где есть русские буквы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 13:08 |
|
||
|
вызов функций из сишной dll
|
|||
|---|---|---|---|
|
#18+
lints, Atmel "отожгла", конечно :( Попробуй так: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 14:23 |
|
||
|
вызов функций из сишной dll
|
|||
|---|---|---|---|
|
#18+
БенедиктПопробуй так: Код: plaintext 1. 2. 3. Программа перестала вылетать с ошибкой. Функция отрабатывает. Только она все равно не воспринимает параметр format. Что бы там не передал, результат оди и тот же - записывает номер в уникоде, а мне нужно число (format ="NUMBER"). И не совсем понятно какой номер она записывает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 15:02 |
|
||
|
вызов функций из сишной dll
|
|||
|---|---|---|---|
|
#18+
C номером вроде бы все нормально, просто он пишет символами уникодовскими шестнадцатиричное представление. Как заставить писать просто шестнадцатеричные числа, а не символы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 15:26 |
|
||
|
вызов функций из сишной dll
|
|||
|---|---|---|---|
|
#18+
lints, Раз функция стала вызываться и отрабатывать, значит угадан размер внутренней структуры string - 16 байт. Где в этой структуре указатель на строку, вопрос реализации STL. Попробуй попереставлять format внутри группы параметров format_npos - format - format_len - format_res со второй позиции на другие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 15:36 |
|
||
|
вызов функций из сишной dll
|
|||
|---|---|---|---|
|
#18+
Бенедикт, Уррррррррааааааа, все заработало.... :) Перестановка не нужна. От этого только опять вылетать начало. У меня осталось от экспериментов декларация dim format as string * 20 оставил dim format as string и все заработало..... Правда пришлось еще поразбираться с currency, так как он передается умноженным на 10000. Огромное всем спасибо, особенно Бенедикту :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 20:40 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=36961120&tid=2159240]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 16ms |
| total: | 155ms |

| 0 / 0 |
