передача массивов из vb6 в dll

Предыдущая тема Следующая тема Перейти вниз

передача массивов из vb6 в dll

Сообщение  Eric-S в Пт Окт 24, 2008 10:44 am

Помогите пожалуйста. Тут у меня приятель мучаеться. Нужно передать массив интегер из vb6 в dll на freebasic.
Я ничего не могу сказать. У меня даже vb6 нет.
Может кто знает, или чего под скажет?


From: "Пилигрим"
To: "Eric-S"
Sent: Friday, October 24, 2008 11:05 AM
Subject: Re: Чёртовы массивы!


Привет, Эрик!
Вот именно, что я передаю массив integer.
Казалось бы с цифрами должно всё на ура, а он чёрт выкобенивается и выбивает vb нахрен.
Массив:
PictMass(1 To 8, 1 To 8)
Передаю просто:
Код:

Dim ComText As String
ComText = FuncName(PictMass())
Ну а в fb функция разумеется выглядит:
Код:

Function FuncName ( PictMass() As Integer ) As bstr Export
И возвращаю через системную функцию.
Но до возврата дело не доходит.
Пишу в самом начале функции.
Код:

MessageBox 0, "Передал али нет?", "PictMass" & PictMass(4, 4)
И он выводит нулевое значение.
Причём, самого массива какбудто вообще нет.
После мессаги нужно скопировать данные в другой местный массив.
Запускаю копирование, а он вылетает в трубу.
Во, зараза!
Всю ночь долбаюсь и не могу никак ничего сделать.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: передача массивов из vb6 в dll

Сообщение  tux в Пт Окт 24, 2008 8:28 pm

Блин, после FB, VB никому неохота ставить, и другу посоветуй))
А вообще конфликт скорее всего в том, что явно не указаны методы передачи параметров в функции, VB делает по умолчанию по значению, а FB по ссылке, если явно указать то мож поможет, а вообще помоему в примерах валялись исходники совмесного использования библиотек FB и VB.
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: передача массивов из vb6 в dll

Сообщение  Eric-S в Пт Окт 24, 2008 10:22 pm

Да я ему ещё давно говорил о переходе, но он на vb6 застрял по нескольким причинам.

Просто делать интерфейс.

Да и совместимость у него там с чем-то.

Короче ну хочет он на vb6 писать, а другого не знает.
Посмотрел на freebasic, вроде бы заинтересовался, но всё время ругаеться.
То массивы не передаються, то строки.
А то переменная не делаеться глобальной. Особенно без слова shared.

Я когда начинал с языка на язык прыгать, меня тоже клинило. То знаки забуду поставить, то ещё чего. Но я начилал ещё с gwBasic.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: передача массивов из vb6 в dll

Сообщение  justar в Сб Окт 25, 2008 12:25 am

Eric-S пишет:Я когда начинал с языка на язык прыгать, меня тоже клинило. То знаки забуду поставить, то ещё чего. Но я начилал ещё с gwBasic.
Не гони. Если не брать в расчёт графику и музыку, все Бейсики до VB процентов на 95-98 были совместимы друг с другом. Даже FB с ключём -lang qb почти полностью совместим со всеми старыми диалектами...

PS: Мне довелось пощупать не только все мелкомягкие Бейсики (начиная аж с BASIC-80), но и многие другие...

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 43
Откуда : Кишинёв, Республика Молдоа

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: передача массивов из vb6 в dll

Сообщение  Eric-S в Сб Окт 25, 2008 7:27 am

Вопрос-то не в том, какие бэйсики бывают и кто какие пользовал.

А как передать массив.
С простыми числами без проблем.
Со строками... Немного посидев уговорили.
А вот массивы. В примерах их нет.

Впрочем ещё не знаю, как там дела. Получил сегодня странное сообщение:

From: "Пилигрим"
To: "Eric-S"
Sent: Saturday, October 25, 2008 3:56 AM
Subject: Re: Winmm.dll


> Я тут хитрющую штуковину обнаружил в fb.
> Дапустим есть два массива по 11 интегеров в каждом.
> Начинается с индекса ноль.
Код:

> CopyMemory ByVal VarPtr(b(0)), ByVal VarPtr(a(0)), 22
> Во как, понял да?
Чешу репу, и пытаюсь понять.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: передача массивов из vb6 в dll

Сообщение  justar в Сб Окт 25, 2008 8:03 pm

Eric-S пишет:
А вот массивы. В примерах их нет.
А через указатели пробовали?

justar

Сообщения : 135
Дата регистрации : 2008-05-12
Возраст : 43
Откуда : Кишинёв, Республика Молдоа

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: передача массивов из vb6 в dll

Сообщение  Eric-S в Сб Окт 25, 2008 8:17 pm

У меня знакомый из далёкой глубинки. Инета ему кое-как хватает только на почту и ещё десяток мегабайт если пояс потуже затянет.
Так вот, я к тому, что это по сути его вопрос, но я дублирую на форуме, так как он сам не может.

У меня же нет vb6.
Распишите, как вы себе представляете передавать массив по указателям. Мне такое трудно представить.

По идее он и так передаёться по указателю же ведь?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: передача массивов из vb6 в dll

Сообщение  tux в Сб Окт 25, 2008 9:39 pm

чета типа того
на FB
Код:

sub sMySub(byval xAdres as integer ptr, byval pKlv as ibteger)
  dim as integer i
  for i=0 to pKlv-1
      print *(xAdres+i*sizeof(integer))
  next i
end sub
ну и из VB помоему делается так, наскока я помню
Код:

const KLV=10
dim aArray(1 to KLV)
sMySub addressof(aArray(1)), KLV
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: передача массивов из vb6 в dll

Сообщение  Eric-S в Вс Окт 26, 2008 10:23 am

----- Original Message -----
From: Пилигрим
To: Eric-S
Sent: Sunday, October 26, 2008 12:38 AM
Subject: Передача в dll


>Цитата:
>А через указатели пробовали?
>Ответ:
Да, выбивает, при этом глохнет всё.
В том числе и джоз пока не ентернёшь.
>Цитата:
>Распишите, как вы себе представляете передавать массив по указателям. Мне такое трудно представить.
>Ответ:
Беспроблем.
a = FuncName(Varptr(Mass()))
>Цитата:
>По идее он и так передаёться по указателю же ведь?
>Ответ:
Внутри бейсика, всмысле vb, нет, переписывается массив целиком в функцию..
>Цитата:
>const KLV=10
dim aArray(1 to KLV)
sMySub addressof(aArray(1)), KLV
>Ответ:
Ха, с одномерным массивом, все эти примудрости не нужны.
Одномерный цифровой массив передаётся без вопросов.


> Как передать массив я так и не понял.
> К стати, по ссылке массив передаётся, но при копировании,
> почему-то в него записываются не предаваемые данные,
> а адреса памяти ячеек.
> И ещё прикол.
> Даже массив интегер благодаря таким преобразованиям раздувается.
> Я просканировал память после передачи и выходит, что одно значение integer
> превращается в шестнадцатибайтовое.
> Хотя интегер должен быть два байта.
> Хотя в два байта адрес памяти не влезит.
> Кто-нибудь, что-нибудь понимает?
> Я лично нифига не понимаю в этом компоте.
> Передал в dll строку, предварительно скопировав в неё данные из массива.
> Но увы, это ничего не даёт.
> Скорость обработки что в fb что в vb 2 минуты.
> Причём, почти совершенно одинаковое время.
> Если и есть разница, то такакя, на которую просто можно не обратить внимание.
> Так что нет смысла в fb.
> Возни много, а результат тот же.
> А жаль, мне очень нужна скорость.
> Ждать ответного хода компьютера по 2 минуты, это хрень.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: передача массивов из vb6 в dll

Сообщение  vbman в Вс Дек 07, 2008 4:00 pm

Массивы в ВБ (и в FB) передаются ВСЕГДА через нолевой (у кого-то первый) элемент массива affraid и, иногда, указанием размера массива. Например (детали неважны):

Laughing
Код:

Type TRGB
    rgbBlue As Byte
    rgbGreen As Byte
    rgbRed as Byte
End Type
Dim topPixel(2) As TRGB

'Копируем из памяти Диб-секции (topRow - адрес памяти, в которой хранятся пиксели) 3 пикселя :suspect:
'Каждый пиксель представлен тремя байтами цвета (РГБ)
CopyMemory topPixel(0), ByVal topRow + X, 3 * 3
cherry alien Suspect

Думаю с многомерными массивами та же история будет, тоько надо будет правильный размер копируемого указать. pale

VarPtr - тоже хорошая функция, особенно если брать нею адрес первого элемента массива... bounce
avatar
vbman

Сообщения : 52
Дата регистрации : 2008-11-19
Возраст : 36
Откуда : Украина, Кировоград

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: передача массивов из vb6 в dll

Сообщение  Eric-S в Пн Дек 08, 2008 8:36 am

Спасибо. Передам. Проверим. Если конечно это ещё актуально. Но по любому, спасибо за ответ!

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: передача массивов из vb6 в dll

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения