Страница 1 из 1
Передать массив в качестве параметра.
![Сообщение Сообщение](./styles/prosilver/imageset/icon_post_target.gif)
Добавлено:
09.05.2005 (Пн) 9:20
Денис Победря
Имеется массив Colors(2).
Функция glmaterialfv(%GL_Front,%GL_AMBIENT,_____) Где третий параметр - массив. Как правильно передать?
![Сообщение Сообщение](./styles/prosilver/imageset/icon_post_target.gif)
Добавлено:
10.05.2005 (Вт) 19:55
X-BOND
Обычно так и передается:
glmaterialfv(%GL_Front,%GL_AMBIENT, Colors())
Еще зависит от декларации функции.
![Сообщение Сообщение](./styles/prosilver/imageset/icon_post_target.gif)
Добавлено:
06.05.2007 (Вс) 7:20
SGO
Я вот тоже с проблемой передачи массива столкнулся... передачи из VB в DLL-ку написанную на PB, кгда запускаю приложение умирает вместе с VB.
Подскажите как правильно передать массив в DLL-ку?
![Сообщение Сообщение](./styles/prosilver/imageset/icon_post_target.gif)
Добавлено:
06.05.2007 (Вс) 10:33
SGO
вот например:
Код на 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]
![Сообщение Сообщение](./styles/prosilver/imageset/icon_post_target.gif)
Добавлено:
06.05.2007 (Вс) 10:41
GSerg
По ходу, весенняя эпидемия передачи массивов в dll.
И никто из заболевших даже не думает воспользоваться поиском.
Побочный, по всей видимости, эффект...
http://bbs.vbstreets.ru/viewtopic.php?t=32473
http://bbs.vbstreets.ru/viewtopic.php?t=32447
![Сообщение Сообщение](./styles/prosilver/imageset/icon_post_target.gif)
Добавлено:
06.05.2007 (Вс) 10:51
SGO
1ая ссылка по делфи
2-ая по C++
![Сообщение Сообщение](./styles/prosilver/imageset/icon_post_target.gif)
Добавлено:
06.05.2007 (Вс) 11:00
GSerg
Нет разницы.
И прекрати постить с интервалом в 2 минуты. Я тебе уже говорил об этом, кажется. Есть кнопка "правка".
![Сообщение Сообщение](./styles/prosilver/imageset/icon_post_target.gif)
Добавлено:
06.05.2007 (Вс) 11:13
keks-n
SGO
ИМХО, из-за того, что в PB по дефолту - ByVal, а в VB-ByRef
![Сообщение Сообщение](./styles/prosilver/imageset/icon_post_target.gif)
Добавлено:
06.05.2007 (Вс) 11:43
jangle
Я вот тоже с проблемой передачи массива столкнулся... передачи из VB в DLL-ку написанную на PB, кгда запускаю приложение умирает вместе с VB.
Подскажите как правильно передать массив в DLL-ку?
А примеры в дистрибутиве слабо посмотреть? Папка VB32
C:\PBWin80\Samples\VB32
![Сообщение Сообщение](./styles/prosilver/imageset/icon_post_target.gif)
Добавлено:
06.05.2007 (Вс) 14:51
SGO
Так... с этим разобрался, спасибо всем:D. У меня ещё такой вопрос:
Можно ли как-нибудь этот самый массив привязать к длл-ке чтоб не передавать его каждый раз когда вызывается функция (просто она очень часто у меня вызывается), а чтоб он был глобальным и для VB и для TB? Я так полагаю что передача целого массива занимает очень много времени... А быть может при компиляции аргументы byref резервируются единажды? Это было бы логично...
![Сообщение Сообщение](./styles/prosilver/imageset/icon_post_target.gif)
Добавлено:
06.05.2007 (Вс) 18:32
jangle
А какой смысл? У тебя, что в массиве данные постоянно одни и те же?
Если да, то действительно, можно один раз передать такой массив в функцию DLL.
Если данные, каждый раз новые, все равно прийдется передавать массив каждый раз заново.
![Сообщение Сообщение](./styles/prosilver/imageset/icon_post_target.gif)
Добавлено:
07.05.2007 (Пн) 4:27
SGO
В том-то и дело что данные почти постоянные.. причём некоторая часть их обрабатывается в основной программе, а некоторая в длл-ке.
Хотя, в принципи, я так посмотрел, что быстродействия мне вполне пока хватает. Да ещё и задумка появилась вообще весь массив объявить в длл и не трогать его в основной программе.
Re: Передать массив в качестве параметра.
![Сообщение Сообщение](./styles/prosilver/imageset/icon_post_target.gif)
Добавлено:
17.08.2011 (Ср) 1:55
spamjokester
А я передаю массивы из 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 при каждом ее вызове,это медленновато будет