| 'Написал программу SpuskVB6, которая нормально работает, но скорость работы из за
'большого объема математических вычислений не удовлетворительная. Тот же самый код
'откомпилированный Free Basic (32 битный) работает в 10 раз быстрее, но мне не хочется расставаться
'с удобством интерфейса программы предоставляемым Visual Basic6.0. Решил создать dll библиотеку
'с математической частью программы и, откомпилировав ее Free Basic, использовать потом
'ее в проекте Visual Basic6.0, но возникли проблемы. Написал для пробы маленький код
'всего с одной функцией
''' program mydll2.bas for Spusk verWIN Free Basic
#include once "mydll2.bi"
function XYZ (byref ipm as integer, byref Xpm as double, byref Ypm as double ) as double export
If ipm = 2 Then GoTo 110
Ypm = 1 - Xpm
GoTo 120
110: Ypm = 1
If Xpm > 0 Then Ypm = 1 - Sqr(1 - (Xpm - 1) * (Xpm - 1))
120 : function = 0
End Function
'Используя
''' program mydll2.bi for Spusk verWIN Free Basic
Declare Function XYZ Lib "mydll2" (ByRef ipm As Integer, ByRef Xpm As Double, ByRef Ypm As Double) As Double
'
'создал командой fbc -dll mydll2.bas файл библиотеки mydll2.dll, которая отлично работает в
'программе SpuskFB, т.е. написанной на Free Basic, как при подключение на стадии компиляции проекта, так
'и в режиме работы программы. Ниже приведены оба варианта кода программы (фрагменты)
'REM program Spusk verWIN Free Basic
Option Explicit
#include once "windows.bi"
'$include: 'mydll2.bi'
DIM as double FX(6) , FY(6), FZ(6), Tmax(6), VX(6), VY(6), VZ(6)
................................................................
For i = 1 To 2
x(i) = bx(i) - 2 * h: Zminus2(i) = XYZ(i, x(i), y(i)): Yminus2(i) = y(i)
'
'option explicit
#include once "windows.bi"
DIM as double FX(6) , FY(6), FZ(6), Tmax(6), VX(6), VY(6), VZ(6)
'............................................................
'dim library as integer
dim XYZ as function(byref ipm as integer, byref Xpm as double, byref Ypm as double ) as double
library = dylibload("mydll2")
XYZ = dylibsymbol(library, "XYZ")
'.................................................................
'For i = 1 To 2
x(i) = bx(i) - 2 * h: Zminus2(i) = XYZ(i, x(i), y(i)): Yminus2(i) = y(i)
'
'Однако IDE Visual Basic 6.0 отказывается добавить ссылку в проект на библиотеку
'mydll2.dll, а программа SpuskVB6 не может найти точку входа в библиотеку, после
объявления функции в программе следующим образом
'Private Declare Function XYZ Lib "mydll2.dll" (ByRef ipm As Integer, ByRef Xpm As Double, ByRef Ypm As Double) As Double
'
'Помогите кто чем может. А, если кого то зантересовал вопрос программирования на разных
'языках, то можете ознакомиться с коллекцией программ Spusk на разных языках на моей
домашней странице http://ser.t-k.ru
С наилучшими пожеланиями Сергей Юдин. | |