Передать массив в качестве параметра.

Раздел посвящен программированию с использованием Power Basic.
Денис Победря
Мегобойанист
Мегобойанист
 
Сообщения: 1037
Зарегистрирован: 03.01.2005 (Пн) 21:29
Откуда: Из Москвы

Передать массив в качестве параметра.

Сообщение Денис Победря » 09.05.2005 (Пн) 9:20

Имеется массив Colors(2).
Функция glmaterialfv(%GL_Front,%GL_AMBIENT,_____) Где третий параметр - массив. Как правильно передать?
[Место cдаётся]

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 10.05.2005 (Вт) 19:55

Обычно так и передается:
glmaterialfv(%GL_Front,%GL_AMBIENT, Colors())
Еще зависит от декларации функции.

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 06.05.2007 (Вс) 7:20

Я вот тоже с проблемой передачи массива столкнулся... передачи из VB в DLL-ку написанную на PB, кгда запускаю приложение умирает вместе с VB.
Подскажите как правильно передать массив в DLL-ку?

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 06.05.2007 (Вс) 10:33

вот например:
Код на PB:
Код: Выделить всё
#COMPILE DLL "array.dll"
FUNCTION sum ALIAS "sum" (m()AS BYTE) EXPORT AS BYTE
    FUNCTION=m(0)+m(1)
END FUNCTION

Код на VB:
Код: Выделить всё
Private Declare Function sum Lib "c:\array.dll" (m() As Byte) As Byte

Private Sub Command1_Click()
    Dim m(1) As Byte
    m(0) = 2
    m(1) = 3
    MsgBox sum(m())
End Sub

Результат должен быть 5, а выходит 0[/code]

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.05.2007 (Вс) 10:41

По ходу, весенняя эпидемия передачи массивов в dll.
И никто из заболевших даже не думает воспользоваться поиском.
Побочный, по всей видимости, эффект...
http://bbs.vbstreets.ru/viewtopic.php?t=32473
http://bbs.vbstreets.ru/viewtopic.php?t=32447
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 06.05.2007 (Вс) 10:51

1ая ссылка по делфи
2-ая по C++

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.05.2007 (Вс) 11:00

Нет разницы.

И прекрати постить с интервалом в 2 минуты. Я тебе уже говорил об этом, кажется. Есть кнопка "правка".
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 06.05.2007 (Вс) 11:13

SGO

ИМХО, из-за того, что в PB по дефолту - ByVal, а в VB-ByRef
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 06.05.2007 (Вс) 11:43

Я вот тоже с проблемой передачи массива столкнулся... передачи из VB в DLL-ку написанную на PB, кгда запускаю приложение умирает вместе с VB.
Подскажите как правильно передать массив в DLL-ку?


А примеры в дистрибутиве слабо посмотреть? Папка VB32

C:\PBWin80\Samples\VB32

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 06.05.2007 (Вс) 14:51

Так... с этим разобрался, спасибо всем:D. У меня ещё такой вопрос:
Можно ли как-нибудь этот самый массив привязать к длл-ке чтоб не передавать его каждый раз когда вызывается функция (просто она очень часто у меня вызывается), а чтоб он был глобальным и для VB и для TB? Я так полагаю что передача целого массива занимает очень много времени... А быть может при компиляции аргументы byref резервируются единажды? Это было бы логично...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 06.05.2007 (Вс) 18:32

А какой смысл? У тебя, что в массиве данные постоянно одни и те же?
Если да, то действительно, можно один раз передать такой массив в функцию DLL.
Если данные, каждый раз новые, все равно прийдется передавать массив каждый раз заново.

SGO
Обычный пользователь
Обычный пользователь
 
Сообщения: 86
Зарегистрирован: 08.01.2007 (Пн) 12:58

Сообщение SGO » 07.05.2007 (Пн) 4:27

В том-то и дело что данные почти постоянные.. причём некоторая часть их обрабатывается в основной программе, а некоторая в длл-ке.
Хотя, в принципи, я так посмотрел, что быстродействия мне вполне пока хватает. Да ещё и задумка появилась вообще весь массив объявить в длл и не трогать его в основной программе.

spamjokester
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 13.08.2011 (Сб) 20:09

Re: Передать массив в качестве параметра.

Сообщение spamjokester » 17.08.2011 (Ср) 1:55

А я передаю массивы из VB>PB для обращения и обработки их как указателей.
Примерно так:
'VB:

dim x(100000) as long
pv_sub_sort (x(0) )
msgbox x(100000)




PB:
#COMPILE DLL
#REGISTER NONE
sub pv_sub_sort alias "pv_sub_sort " (x as long) export

dim x_ptr as long ptr
x_ptr=varptr(x)
@x_ptr[100000]=1

end sub

Обьявление множества массивов в DLL при каждом ее вызове,это медленновато будет


Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

    TopList