Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Ну почему она не пашет!!??? Добавлено: 23.08.04 19:08  

Автор вопроса:  MARCUS | Web-сайт: www.talbica.narod.ru
В библиотеке, написанной на СИ++, есть функция, к-рая увеличивает каждый элемент массива на единицу. Передаю в неё 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-сайт: www.talbica.narod.ru
 Профиль | | #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-сайт: www.talbica.narod.ru
 Профиль | | #6
Добавлено: 24.08.04 11:50
СДелал через лонг, та же трабла. Хоть бы ошибку выдал - так ведь просто вылетает и всё.

Ответить

Номер ответа: 7
Автор ответа:
 MARCUS



Вопросов: 24
Ответов: 13
 Web-сайт: www.talbica.narod.ru
 Профиль | | #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-сайт: basicproduction.nm.ru
 Профиль | | #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

Ответить

Страница: 1 |

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



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