Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Power Basic

Страница: 1 | 2 | 3 |

 

  Вопрос: Как передать массив Добавлено: 23.01.04 18:55  

Автор вопроса:  cresta

Ответить

  Ответы Всего ответов: 32  

Номер ответа: 16
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #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-сайт: hw.t-k.ru
 Профиль | | #17
Добавлено: 24.01.04 12:23

А вот к стати, тут в PB пример есть:
C:\PBWin70\Samples\VB32\Sort VB Array

Ответить

Номер ответа: 18
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #18
Добавлено: 25.01.04 00:47

Ну если с массивом значений почти разобрались, заодно не плохо было бы понять как строковые массивы передавать... Я потыкался, немного не понял :(

Ответить

Номер ответа: 19
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #19
Добавлено: 25.01.04 02:02
В нормальных языках строковый массив - это массив Long указателей на строки. Как в VB не уверен, но, полагаю, так же. Только если ты собираешься использовать строки в PB, убедись в преобразовании Unicode в то, что тебе нужно.

Ответить

Номер ответа: 20
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #20
Добавлено: 25.01.04 02:13

Незнаю, работал только в С (слегка) и в VB, дык в C строки это двумерный массив байт :( Тут же вообще непойми что... Ладно, может потом сам дойду ;)

Ответить

Номер ответа: 21
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #21 Добавлено: 25.01.04 05:39

To CyRax : Не думаю, что развратил меня VB. Не успел ещё. Я полгода назад ещё не знал, как инсталлировать программы на комп, потому что никогда им до этого не пользовался. Если интересно, посмотри, когда было моё первое сообщение на форуме VBNet. И мне действительно непонятно, почему вот такой код в DLL отправляет IDE к некоторой матери:
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())

To Sne: Да, я видел этот пример. А строковая ф-ция там вызывается и сортирует нормально, я пробовал, сделал так и сортируется по алфавиту:
   For x = 1 To 12
      a(x) = MonthName(x)
   Next x
   SortString a()

Ответить

Номер ответа: 22
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #22
Добавлено: 25.01.04 09:27
Потому что ты пытаешся показать в MsgBox'е пустой указатель.
Просто ты забыл присвоить ему значение. И если пустая строка это "", пустая перменная это 0, то пустой указатель это адрес памяти 0.
Надеюсь ты теперь представил полную картину что такое указатели в ПБ.
---
Если бы это было б в VB, то ты скорее всего получил соответствующее сообщение. А здесь, как видишь, сообщение несколько иного толка.
Это так называемый стиль программироования на VB.
---
А код который тебе показал sne - код в стиле Си. Я сначала подумал что он просто хорошо знает API.
===
2 sne
Разобрался? Если нет, то я позжее гляну.

Ответить

Номер ответа: 23
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #23
Добавлено: 25.01.04 11:09

Нет, еще не разобрался, попросту я вот тут думаю либо ctl создать на VB или dll на PB... Ну для свойств выпадающих, если знать как строковые значения пересылать, то можно бб и на PB такую штуку сотворить... Тем более что имеется пример прорисовки ListBox...

Ответить

Номер ответа: 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-сайт: hw.t-k.ru
 Профиль | | #25
Добавлено: 26.01.04 10:09

cresta, если ты не заметил, то это я и оставлял:

А вот к стати, тут в PB пример есть:

C:\PBWin70\Samples\VB32\Sort VB Array

А туды я конечно же заглянул, но мне не очень то понравилось использовать для этого сторонние АПИ, если можно средствами PB все это сделать... Ну очень хочется ;)

Ответить

Номер ответа: 26
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #26 Добавлено: 26.01.04 12:06
Заметил, поэтому про VBAPI32.inc и брякнул. А PB тоже ведь в своих действия в основном опирается на АПИ или не так?

Ответить

Номер ответа: 27
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #27
Добавлено: 26.01.04 18:07

К сожалению из за несовместимости способов хранения строк ты не сможешь этого сделать без АПИ.

А то что написано в Help'е и есть средства PB. Я думаю разработчики BP потратили много времени что бы упростить работу с одним из главных типов данных - строкой. Не забывай что ПБ - компилятор и никакая интерпитация неуместна.

Чем они тебе не нравятся. Просто стиль написания или то что это делается через API?

Ответить

Номер ответа: 28
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #28
Добавлено: 27.01.04 00:44

Обидно... Ладно, теперь можно переходить к UserType массивам :)

Будем работать через АПИ, попросту хотелось встроеными функциями...

Ответить

Номер ответа: 29
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #29
Добавлено: 27.01.04 02:03

2 sne

Почему это они вдруг сторонние. Там же в заголовке написано

'  Copyright (C) 1997,1999,2002 PowerBASIC, Inc.
'  Some portions Copyright (C) 1994 Microsoft Corporation

Ответить

Номер ответа: 30
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #30
Добавлено: 27.01.04 11:51

Да не в том дело, сторонние, не сторонние, поставлен там КопиРайт, аль нет его, попросту ведь в VB есть функция MsgBox, и все пользуют ее, а не декларируют MessageBoxA, вот и мне попросту хотелось использовать встроеные функции языка... Ну да ладно, я посмотрел, те АПИ есть уже с 95-го... Хотя если честно, такие названия вижу впервые :)

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам