(PB)DLL можно ли подключить к VB, если да, то как?

Раздел посвящен программированию с использованием Power Basic.
Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

(PB)DLL можно ли подключить к VB, если да, то как?

Сообщение Memfivosfey » 23.07.2007 (Пн) 2:27

Прочитал в интернете, что по тестам, PBWin скоростью превосходит VB и что некоторые прграммисты активно пользуються этим, создавая в PB dll библиотеки и подключая их к проектам на VB.

Благо, что синтаксис похожий и я сделал DLL в PB. После попробовал её подключить к своему проекту через Declare ничего не вышло, даже просто зарегистрировать в Windows её и то не получилось.

Поясните пожалуйста, кто знает, почему?

Пишет, что немогу найти точку входа.
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

Dark Machine
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 126
Зарегистрирован: 26.05.2004 (Ср) 13:12

Сообщение Dark Machine » 23.07.2007 (Пн) 8:32

смотри в папку \Samples\VB32\ где установлен компилятор
там много примеров.
про точку входа: возможно пропустил ключевое слово EXPORT.
DLL регистрировать ненужно.
или пропустил клюевое слово ALIAS на VB.
Экспортируемые процедуры и ф-ции генерятся ЗАГЛАВНЫМИ буквами.

вот пример дистрибутива:

PowerBASIC
Код: Выделить всё
#COMPILE DLL
FUNCTION AddOne (BYVAL x AS LONG) EXPORT AS LONG
    FUNCTION = x + 1
END FUNCTION


VB
Код: Выделить всё
Declare Function AddOne& Lib "ADDONE.DLL" Alias "ADDONE" (ByVal x&)

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 23.07.2007 (Пн) 8:54

Пасиб, попробую.:)
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 23.07.2007 (Пн) 9:02

Получилось :), ещё раз спасибо.
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 23.07.2007 (Пн) 9:21

Экспортируемые процедуры и ф-ции генерятся ЗАГЛАВНЫМИ буквами.


По моему это некрасиво и не в стиле Windows, лучше прописывать Alias`ы внутри DLL и генерить имена экспортируемых функций нормальными буквами

Код: Выделить всё
#COMPILE DLL
FUNCTION AddOne Alias "AddOne"  (BYVAL x AS LONG) EXPORT AS LONG
    FUNCTION = x + 1
END FUNCTION

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 23.07.2007 (Пн) 14:24

Экспортируемые процедуры и ф-ции генерятся ЗАГЛАВНЫМИ буквами.


У меня была именно эта ошибка.
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 23.07.2007 (Пн) 21:59

Ладно, не буду создавать ещё темы, но у меня возникла ещё пара вопросов :)

1. Поддерживает ли PB многопоточность? Если да, то каким образом её организовать? Ну или хотя бы каким образом возможно в PB сделать таймер по типу VB-шного контрола или чем заменить?

2. Есть ли в PB простой оператор завершения программы. Как в старых Базиках? Типа END? не нашёл... Надо просто вывалиться из программы в определённом месте по определённому условию.

Спасибо :)
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 23.07.2007 (Пн) 22:06

1. Поддерживает ли PB многопоточность? Если да, то каким образом её организовать? Ну или хотя бы каким образом возможно в PB сделать таймер по типу VB-шного контрола или чем заменить?


Да конечно, смотри в хелпе описание функции THREAD CREATE


Есть ли в PB простой оператор завершения программы. Как в старых Базиках? Типа END? не нашёл... Надо просто вывалиться из программы в определённом месте по определённому условию.


Call ExitProcess(0)

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 25.07.2007 (Ср) 0:52

Спасибо огромное, всё работает.
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 21.08.2007 (Вт) 15:37

Возник ещё один вопрос по теме :)

Поддерживает ли PB: массив в функцию и массив из функции???

Вобщем такую структуру:
Function FuncName (Value As String) As String()


Попробовал сделать DLL
Function FuncName (Value As String) EXPORT As String()

неработает :(

Кто знает, подскажите плиз.
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 21.08.2007 (Вт) 15:46

Возник ещё один вопрос по теме

Поддерживает ли PB: массив в функцию и массив из функции???

Вобщем такую структуру:


Да. В папке твоего PB лежат готовые примеры:

C:\PBWin80\Samples\VB32

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 21.08.2007 (Вт) 15:56

Спасибо, попробую разобраться :)

Может ты мне тогда ещё подскажешь

Возможна ли передача в функцию объектов, значения их свойств, как в VB6

Function FuncName (Value As Object) as string


или где можно посмотреть также :)

Ещё раз Спасибо огромное :)
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 21.08.2007 (Вт) 16:07

Спасибо, попробую разобраться

Может ты мне тогда ещё подскажешь

Возможна ли передача в функцию объектов, значения их свойств, как в VB6


Что-то непонятно, какие объекты нужно передавать? Из VB6?
Значение свойств объектов, можно передать через переменные.

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 21.08.2007 (Вт) 16:13

Ну напрмер, мне необходимо
В теле функции проделать какие-то обработки, чтения файла, а потом допустим заполнить COMBO BOX на форме.

Функцию хочу скомпилить в DLL и вызывать из VB6
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 21.08.2007 (Вт) 16:43

Не нужно здесь никаких объектов. Передавай в DLL хендл ComboBox, а в DLL заполняй его через SendMessage.

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 21.08.2007 (Вт) 16:44

Спасибо, тоже вариант, мне и в голову не пришло :oops:
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 22.08.2007 (Ср) 23:57

Не всегда будет работать(не о комбобоксе, а об общем случае контрола). Передавать в функцию As Object - PB отлично умеет работать с IDispatch. Теоретически можно использовать и раннее связывание, но надо декомпилить вбшную библиотеку типов и смотреть, в каком порядке идут методы в vtable.
Изображение


Вернуться в Power Basic

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

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

    TopList