Страница: 1 | 2 | 3 |
А вот к стати, тут в PB пример есть: Ну если с массивом значений почти разобрались, заодно не плохо было бы понять как строковые массивы передавать... Я потыкался, немного не понял Незнаю, работал только в С (слегка) и в VB, дык в C строки это двумерный массив байт Тут же вообще непойми что... Ладно, может потом сам дойду To CyRax : Не думаю, что развратил меня VB. Не успел ещё. Я полгода назад ещё не знал, как инсталлировать программы на комп, потому что никогда им до этого не пользовался. Если интересно, посмотри, когда было моё первое сообщение на форуме VBNet. И мне действительно непонятно, почему вот такой код в DLL отправляет IDE к некоторой матери: To Sne: Да, я видел этот пример. А строковая ф-ция там вызывается и сортирует нормально, я пробовал, сделал так и сортируется по алфавиту: Нет, еще не разобрался, попросту я вот тут думаю либо ctl создать на VB или dll на PB... Ну для свойств выпадающих, если знать как строковые значения пересылать, то можно бб и на PB такую штуку сотворить... Тем более что имеется пример прорисовки ListBox... cresta, если ты не заметил, то это я и оставлял: А вот к стати, тут в PB пример есть: C:\PBWin70\Samples\VB32\Sort VB Array К сожалению из за несовместимости способов хранения строк ты не сможешь этого сделать без АПИ. А то что написано в Help'е и есть средства PB. Я думаю разработчики BP потратили много времени что бы упростить работу с одним из главных типов данных - строкой. Не забывай что ПБ - компилятор и никакая интерпитация неуместна. Чем они тебе не нравятся. Просто стиль написания или то что это делается через API? Обидно... Ладно, теперь можно переходить к UserType массивам 2 sne Почему это они вдруг сторонние. Там же в заголовке написано ' Copyright (C) 1997,1999,2002 PowerBASIC, Inc. Да не в том дело, сторонние, не сторонние, поставлен там КопиРайт, аль нет его, попросту ведь в VB есть функция MsgBox, и все пользуют ее, а не декларируют MessageBoxA, вот и мне попросту хотелось использовать встроеные функции языка... Ну да ладно, я посмотрел, те АПИ есть уже с 95-го... Хотя если честно, такие названия вижу впервые
Вопрос: Как передать массив
Добавлено: 23.01.04 18:55
Автор вопроса: cresta
Ответы
Всего ответов: 32
Номер ответа: 16
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #16
Добавлено: 24.01.04 09:01
Раз у тебя раньше не получалось, то почему оно вдруг должно начать получаться сейчас?
---
А если серьёзно то для нормальной работы на PB нужно знать основы низкоуровнего программирования. Или хотя бы хелпы читать время от времени. Сказывается что ты кроме VB в жизни ничего не видел.
И он тебя сильно развратил своими автоматизмами.
===
-PB-
'Прошлый код
Dim tmpVar As Long
tmpVar=@xPtr[1]
@xPtr[1]=@xPtr[Index]
@xPtr[Index]=tmpVar
===
-VB-
'Прошлый код
MsgBox Arr1(9), , "Arr1(9)"
MsgBox Arr1(1), , "Arr1(1)"
===
А вообще, к стилю смешанного системно-прикладного программирования нужно просто привыкнуть.
Номер ответа: 17
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #17
Добавлено: 24.01.04 12:23
C:\PBWin70\Samples\VB32\Sort VB Array
Номер ответа: 18
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #18
Добавлено: 25.01.04 00:47
Номер ответа: 19
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #19
Добавлено: 25.01.04 02:02
В нормальных языках строковый массив - это массив Long указателей на строки. Как в VB не уверен, но, полагаю, так же. Только если ты собираешься использовать строки в PB, убедись в преобразовании Unicode в то, что тебе нужно.
Номер ответа: 20
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #20
Добавлено: 25.01.04 02:13
Номер ответа: 21
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #21
Добавлено: 25.01.04 05:39
FUNCTION SortArrDescend ALIAS "SortArrDescend" _
(MyArray AS LONG, BYVAL ArrLen AS LONG) EXPORT AS LONG
DIM xPtr AS LONG POINTER
DIM i AS LONG
DIM sss&
MSGBOX STR$(ArrLen&
FOR i& = 0 TO ArrLen& - 1
sss& = sss& + @xPtr[i&]
NEXT
MSGBOX STR$(i&
'FUNCTION = 1
END FUNCTION
Причём, ОБА msgbox'а отрабатывают. После второго ничего нет. Почему она не возвращается? Хотя вчера она же возвращалась без проблем. Вызывается из IDE так:
Private Declare Function SortArrDescend Lib "A.dll" (MyArray As Long, ByVal ArrLen As Long) As Long
Dim Arr() as Long
Redim Arr(1 To 1000)
For i = 1 To 1000
Arr(i)=RND*1000
Next i
SortArrDescend Arr(1), ByVal UBound(Arr())
For x = 1 To 12
a(x) = MonthName(x)
Next x
SortString a()
Номер ответа: 22
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #22
Добавлено: 25.01.04 09:27
Потому что ты пытаешся показать в MsgBox'е пустой указатель.
Просто ты забыл присвоить ему значение. И если пустая строка это "", пустая перменная это 0, то пустой указатель это адрес памяти 0.
Надеюсь ты теперь представил полную картину что такое указатели в ПБ.
---
Если бы это было б в VB, то ты скорее всего получил соответствующее сообщение. А здесь, как видишь, сообщение несколько иного толка.
Это так называемый стиль программироования на VB.
---
А код который тебе показал sne - код в стиле Си. Я сначала подумал что он просто хорошо знает API.
===
2 sne
Разобрался? Если нет, то я позжее гляну.
Номер ответа: 23
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #23
Добавлено: 25.01.04 11:09
Номер ответа: 24
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #24
Добавлено: 25.01.04 22:38
Ага, разобрался. Пытался собрать массив, не указав его начало в xPtr. Пропустил xPtr=VarPtr(MyArray).
Ну тогда я ещё понадоедаю, если можно ? В примерах (в папке Samples) есть VBSort.dll и пример её вызова из VB. Вызывается так: передается как параметр сам массив: SortString a$() , а в dll принимается параметр Sub SortString (psa as DWORD) - указатель на массив. Если я правильно понял, то указатель на массив и его параметры из имени a$() формирует msvbvm60, и как DWORD передают в Sub? И я до сих пор изобретаю велосипед, пытаясь указать, где лежит мой массив. К тому же, оказывается, в OLEAUT32.DLL и в VBAPI32.inc есть куча функций по работе с массивами. Кстати, Sne, а ты не заглядывал в VBAPI32.inc? Там есть конвертация Unicode-ANSI и наоборот. И вроде чего-то про передачу строковых значений. Может это то, что тебе надо?
Номер ответа: 25
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #25
Добавлено: 26.01.04 10:09
А туды я конечно же заглянул, но мне не очень то понравилось использовать для этого сторонние АПИ, если можно средствами PB все это сделать... Ну очень хочется
Номер ответа: 26
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #26
Добавлено: 26.01.04 12:06
Заметил, поэтому про VBAPI32.inc и брякнул. А PB тоже ведь в своих действия в основном опирается на АПИ или не так?
Номер ответа: 27
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #27
Добавлено: 26.01.04 18:07
Номер ответа: 28
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #28
Добавлено: 27.01.04 00:44
Будем работать через АПИ, попросту хотелось встроеными функциями...
Номер ответа: 29
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #29
Добавлено: 27.01.04 02:03
' Some portions Copyright (C) 1994 Microsoft Corporation
Номер ответа: 30
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #30
Добавлено: 27.01.04 11:51