
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
31.01.2012, 14:45
|
|||
|---|---|---|---|
|
|||
Массив из ДЛЛ |
|||
|
#18+
Добрый день, уважаемые!!! Есть ДЛЛ, написанная на Delphi. В ней есть процедура, которая возвращает указатель на массив. В Delphi ее вызвать просто Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Хотелось бы вызывать ее в VBA. В гугле искал, ничего внятного не нашел. Может быть, все просто, но я в VBA не силен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2012, 15:10
|
|||
|---|---|---|---|
Массив из ДЛЛ |
|||
|
#18+
Ничего не просто. Во-первых, VB не очень-то дружит с указателями, во-вторых, совсем не знаком с дельфевыми массивами. Если будет указатель хотя бы на SAFEARRAY, то с этим уже можно как-то работать. В противном случае для vb это указатель на байтовый массив неизвестной величины. Если вы знаете, что представляют из себя дельфевые массивы в памяти в "сыром" виде, если они хранят и свой размер как SAFEARRAY, можете попытаться раскодировать эти байты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2012, 15:29
|
|||
|---|---|---|---|
|
|||
Массив из ДЛЛ |
|||
|
#18+
авторНичего не просто. Во-первых, VB не очень-то дружит с указателями, во-вторых, совсем не знаком с дельфевыми массивами. Если будет указатель хотя бы на SAFEARRAY, то с этим уже можно как-то работать. В противном случае для vb это указатель на байтовый массив неизвестной величины. Если вы знаете, что представляют из себя дельфевые массивы в памяти в "сыром" виде, если они хранят и свой размер как SAFEARRAY, можете попытаться раскодировать эти байты. Хорошо, а если размер массива и тип данных известен? В данном случае - Long. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2012, 16:15
|
|||
|---|---|---|---|
Массив из ДЛЛ |
|||
|
#18+
Можно попробовать так: Dim arr(0 to размер_массива) as Long CopyMemory arr(0), указатель, размер_массива * 4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2012, 16:29
|
|||
|---|---|---|---|
Массив из ДЛЛ |
|||
|
#18+
Можно SAFEARRAY и на стороне VB/VBA заполнить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2012, 16:47
|
|||
|---|---|---|---|
|
|||
Массив из ДЛЛ |
|||
|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Нули выдает, а должны быть значения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2012, 16:54
|
|||
|---|---|---|---|
Массив из ДЛЛ |
|||
|
#18+
Абкт, как-то совсем плохо выглядит. 1) Option Explicit 2) Описать в Declare aParr As Long 3) Описать в процедуре переменную, которая будет принимать адрес первого элемента массива. 4) Вызвать-таки MInit. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2012, 16:58
|
|||
|---|---|---|---|
Массив из ДЛЛ |
|||
|
#18+
Даже ещё хуже. MInit не возвращает (адрес начального элемента массива), а принимает по значению адрес array of Integer. Каша, короче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2012, 17:45
|
|||
|---|---|---|---|
Массив из ДЛЛ |
|||
|
#18+
Если дельфевый Integer = вбшный Integer, то * 2. Я почему-то подумал, что Long. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
31.01.2012, 18:11
|
|||
|---|---|---|---|
Массив из ДЛЛ |
|||
|
#18+
Antonariy, это, кажется, в первых версиях Дельфи Integer был generic-ом, и мог выбираться 16/32, сейчас вроде 32-битный (если снова не generic 32/64). Абкт, короче, пробуй так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Но MInit должна корректно работать с массивом, не выходя за его границы. Если она это делает, ориентируясь на High(), то вряд ли что-то хорошее выйдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/moderation_log.php?user_name=%D0%A1%D0%BB%D0%B0%D0%B2%D0%B0+%D0%92%D0%BE%D0%BB%D0%BA%D0%BE%D0%B2]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
154ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
| others: | 890ms |
| total: | 1159ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...