DLL (C++) для VB

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
D'alex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 144
Зарегистрирован: 08.05.2004 (Сб) 20:11
Откуда: Moscow

DLL (C++) для VB

Сообщение D'alex » 22.01.2005 (Сб) 14:57

Извините если что не так сформулировал, но вопрос такой...
Можно ли использовать функции любой библы написанной на С++
в проектах на VB , т.е как API? Или данная библа должна быть откомпелирована специальным образом?
Например имеем DLL написанную на C++ имеем SDK по ее использованию в проектах на C++...Как использовать ее возможности для программ на VB?
Последний раз редактировалось D'alex 22.01.2005 (Сб) 15:07, всего редактировалось 1 раз.

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 22.01.2005 (Сб) 15:05

Я думаю что да . Если написанную библу на Асме я видел использовали то и на C++ наверно можно !

:wink:
Max!

Arcanoid
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 01.01.2005 (Сб) 15:44

Сообщение Arcanoid » 22.01.2005 (Сб) 15:12

Можно без особых проблем!

Arcanoid
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 01.01.2005 (Сб) 15:44

Сообщение Arcanoid » 22.01.2005 (Сб) 15:15

только экспортируемые ф-ии в DLL шобы VB мог их вызвать должны быть оформлены как __stdcall

D'alex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 144
Зарегистрирован: 08.05.2004 (Сб) 20:11
Откуда: Moscow

Сообщение D'alex » 22.01.2005 (Сб) 15:30

Т.е если функции в DLL(С++) оформлены не как stdcall использовать их в VB нет никакой возможности? Или всетаки есть какой-нибудь способ?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.01.2005 (Сб) 15:50

Есть, но очень геморный :-)
Подробности у GSerg-а в статье "вызов функций по указателю"
Изображение

D'alex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 144
Зарегистрирован: 08.05.2004 (Сб) 20:11
Откуда: Moscow

Сообщение D'alex » 22.01.2005 (Сб) 17:26

Для меня это не просто геморойный , а сверхгеморойный способ...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.01.2005 (Сб) 18:08

А исходники от длл-ки есть? Может, легче перекомпилировать с stdcall?
Изображение

D'alex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 144
Зарегистрирован: 08.05.2004 (Сб) 20:11
Откуда: Moscow

Сообщение D'alex » 22.01.2005 (Сб) 18:49

Исходников нет есть только SDK по использованию в VC...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.01.2005 (Сб) 18:57

Ну, тогда не повезло :-(
Изображение

D'alex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 144
Зарегистрирован: 08.05.2004 (Сб) 20:11
Откуда: Moscow

Сообщение D'alex » 22.01.2005 (Сб) 23:20

Интересно а PowerBasic распологает возможностями которые я описывап ранее? Может можно сделать промежуточную библу для VB на Power'e?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.01.2005 (Вс) 9:41

Может, имеет смысл сделать промежуточную библу прямо на C++?
Изображение

D'alex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 144
Зарегистрирован: 08.05.2004 (Сб) 20:11
Откуда: Moscow

Сообщение D'alex » 23.01.2005 (Вс) 14:13

Да идея то хорошая только вот в Си я абсолютный лох...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.01.2005 (Вс) 14:44

Тогда какой тебе толк от её SDK, раз оно тоже для C++? ;-)

Что за библиотека-то хоть? Может, для неё есть более дружественные к VB аналоги?
Изображение

D'alex
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 144
Зарегистрирован: 08.05.2004 (Сб) 20:11
Откуда: Moscow

Сообщение D'alex » 23.01.2005 (Вс) 16:44

Подключить функции как API и работать с ними....
Библиотека физического процессора для просчета физики в играх...
Создать аналогию на VB - утопия...Вернее создать то можно , но скорость просчетов - сам понимаешь - просто бесполезно...

Cryonyx
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 292
Зарегистрирован: 12.11.2004 (Пт) 15:40
Откуда: Net_SubStream

Сообщение Cryonyx » 23.01.2005 (Вс) 17:30

А ты не пробовал через Declare Function ...?
У меня как-то раз получилось, но это правда прокатывает не со всеми функциями.
Если тебе не по сердцу мой путь,
Выбери сам или выбери с кем,
А мне по барабану вся эта муть -
Я не червонец, чтобы нравиться всем!
© К.Кинчев
--
Мой блог: щёлкай сюда

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.01.2005 (Вс) 20:41

Cryonyx писал(а):А ты не пробовал через Declare Function ...?
У меня как-то раз получилось, но это правда прокатывает не со всеми функциями.
Только с stdcall. У него, похоже, cdecl.
Изображение

Cryonyx
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 292
Зарегистрирован: 12.11.2004 (Пт) 15:40
Откуда: Net_SubStream

Сообщение Cryonyx » 23.01.2005 (Вс) 21:34

tyomitch писал(а):Только с stdcall. У него, похоже, cdecl.

Можешь объяснить, а cdecl - это что? Просто пример с Declare я знаю потому, что случайно на него наткнулся :roll:
Если тебе не по сердцу мой путь,
Выбери сам или выбери с кем,
А мне по барабану вся эта муть -
Я не червонец, чтобы нравиться всем!
© К.Кинчев
--
Мой блог: щёлкай сюда

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 24.01.2005 (Пн) 8:30

Я изивиняюсь за то, что влажу в вашу дискуссию, но у меня похожий вопрос... А можно ли использовать в вб библы написанные на Delphi7? Какие нуна ставить параметры при компиляции dll? :roll:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.01.2005 (Пн) 9:23

Cryonyx писал(а):
tyomitch писал(а):Только с stdcall. У него, похоже, cdecl.

Можешь объяснить, а cdecl - это что? Просто пример с Declare я знаю потому, что случайно на него наткнулся :roll:

Это тип вызова, отличный от stdcall. См. http://bbs.vbstreets.ru/viewtopic.php?t=11920
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.01.2005 (Пн) 9:24

Vovik писал(а):Я изивиняюсь за то, что влажу в вашу дискуссию, но у меня похожий вопрос... А можно ли использовать в вб библы написанные на Delphi7? Какие нуна ставить параметры при компиляции dll? :roll:

Можно. После объявления каждой функции нужно дописывать слово stdcall.
Изображение

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 24.01.2005 (Пн) 18:06

tyomitch писал(а):
Vovik писал(а):Я изивиняюсь за то, что влажу в вашу дискуссию, но у меня похожий вопрос... А можно ли использовать в вб библы написанные на Delphi7? Какие нуна ставить параметры при компиляции dll? :roll:

Можно. После объявления каждой функции нужно дописывать слово stdcall.
Спасибо, заработало... Только теперь по завершению проекта выскакивает ошибка "Инструкция по адресу "0х00000000" обратилась к памяти по адресу "0х00000000". Память не может быть "read". Ok - завершение прил. Отмена - отладка прил." Че за ерунда такая, может знаешь? :roll:

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

Сообщение GSerg » 24.01.2005 (Пн) 18:09

Не знает.
Ты чё сделал-то? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 25.01.2005 (Вт) 12:00

GSerg писал(а):Не знает.
Ты чё сделал-то? :)
Дело в том, что при создании новой длл, там стоит пометка:
    { Important note about DLL memory management: ShareMem must be the
    first unit in your library's USES clause AND your project's (select
    Project-View Source) USES clause if your DLL exports any procedures or
    functions that pass strings as parameters or function results. This
    applies to all strings passed to and from your DLL--even those that
    are nested in records and classes. ShareMem is the interface unit to
    the BORLNDMM.DLL shared memory manager, which must be deployed along
    with your DLL. To avoid using BORLNDMM.DLL, pass string information
    using PChar or ShortString parameters. }

Вот я эту ShareMem и поставил в uses. После того, как убрал - все стало ок :shock: .... И ещё вопросик: что за такая Host Application? Пока не укажешь и не нажмешь лоад - компилить не хочет... :roll:

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

Сообщение GSerg » 25.01.2005 (Вт) 12:14

Компилить хочет по-любому.
Отлаживать не хочет - это ж библа... Ты кнопку-то правильную жми :)
И читай внимательно коммент, чтобы понять, нужен тебе мемменеджер или нет :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 25.01.2005 (Вт) 17:17

GSerg писал(а):Компилить хочет по-любому.
Отлаживать не хочет - это ж библа... Ты кнопку-то правильную жми :)
И читай внимательно коммент, чтобы понять, нужен тебе мемменеджер или нет :)
да я уж понял.... так для чего нуна указывать этот exe? :roll:

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

Сообщение GSerg » 25.01.2005 (Вт) 17:52

Для компиляции не нужно.
Его нужно указывать только для отладки. За ним будет слежение на предмет вызовов к отлаживаемой библе.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

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

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

    TopList