Страница: 1 |
Страница: 1 |
Вопрос: Ну почему она не пашет!!???
Добавлено: 23.08.04 19:08
Автор вопроса: MARCUS | Web-сайт:
В библиотеке, написанной на СИ++, есть функция, к-рая увеличивает каждый элемент массива на единицу. Передаю в неё byref массив и его размер (byval). ВБ вылетает! Без предупреждения! Ну что не так!!??:
dim a(1 to 3) as integer, l as integer
Private Sub Command1_Click()
a(1) = 1
a(2) = 2
a(3) = 3
Plus a(), 3
For i = 1 To 3
Print a(i)
Next i
End Sub
('in module:
Public Declare Function Plus Lib "max.dll" (ByRef a() As Integer, l As Integer)
)
Вроде и так и этак пробовал - ничего! Обидно, понимаищь.
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
Kodo
Разработчик Offline Client
ICQ: 293048085
Вопросов: 37
Ответов: 457
Профиль | | #1
Добавлено: 23.08.04 19:13
А нахрена тебе эта функция, написанная на C++? По-моему её на VB написать раз плюнуть.
for i = 0 to uBound(YourArray)
YourArray(i)=YourArray(i)+1
Next i
Номер ответа: 2
Автор ответа:
MARCUS
Вопросов: 24
Ответов: 13
Web-сайт:
Профиль | | #2
Добавлено: 23.08.04 22:21
Да эта-то функция мне с деньгами не нужна, просто у меня есть библиотека с гигантским алгоритмом (на СИ), который переводить нет мочи. С ней та же трабла. Вот и составил мини-библиотеку с мини-функцией, засёк, почему она вылетает, оказалось - при передаче (или отдаче) массивов.
Номер ответа: 3
Автор ответа:
vb_lord
Вопросов: 7
Ответов: 45
Профиль | | #3
Добавлено: 23.08.04 22:49
если в си написано Integer, то в VB можно написать long(integer вроде у них разный)?
Номер ответа: 4
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #4
Добавлено: 24.08.04 07:44
А у тебя 3Ds Max не стоит?
Просто может такая библиотека уже зарегана? А у той функции Plus наверное нет
А откуда ты свою max.dll подключаешь (из какой папки)
Номер ответа: 5
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #5
Добавлено: 24.08.04 08:17
Согласен с vb_lord, формат данных Integer в С++ имеет длину 4 байта, как и Long, в ВБ же только два, отсюда глюки неизбежны. Делай через Long.
Номер ответа: 6
Автор ответа:
MARCUS
Вопросов: 24
Ответов: 13
Web-сайт:
Профиль | | #6
Добавлено: 24.08.04 11:50
СДелал через лонг, та же трабла. Хоть бы ошибку выдал - так ведь просто вылетает и всё.
Номер ответа: 7
Автор ответа:
MARCUS
Вопросов: 24
Ответов: 13
Web-сайт:
Профиль | | #7
Добавлено: 24.08.04 11:52
3ds max не стоит, подключаю из system32.
Номер ответа: 8
Автор ответа:
vb_lord
Вопросов: 7
Ответов: 45
Профиль | | #8
Добавлено: 24.08.04 13:20
<< dim a(1 to 3)
Честно говоря, не помню, можно ли в си сделать подобное объявление на три элемента. Скорее всего там такое:
int a[3] - и индексы будут от 0 до 2.
и когда массив передаешь, можно попробовать вручную передать адрес первого элемента
Номер ответа: 9
Автор ответа:
vb_lord
Вопросов: 7
Ответов: 45
Профиль | | #9
Добавлено: 24.08.04 22:40
>>Public Declare Function Plus Lib "max.dll" (ByRef a() As Integer, l As Integer)
- необычно выглядит(функция VB без типа)
если в библиотеке функция типа void попробуй Declare Sub
Номер ответа: 10
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #10
Добавлено: 24.08.04 23:20
>Public Declare Function Plus Lib "max.dll" (ByRef a() As Integer, l As Integer)
А если так попробовать:
Public Declare Function Plus Lib "max.dll" (ByRef a As Long, l As Integer)
А вызывать так:
Plus a(0), 3