用VB写一个动态链接库,要实现的功能如下: 设有两个一维数组. a[i]和b[i]. 数组里面的值在0~256之间 (数组里面的值不能为256)两数组里面的值是任意的已知数.两数组里面的值不能相同.
0<i<256 '我们假设i为10吧 ...可以为任意。假设。我们在坐标上,设点,a[i]为点的Y轴坐标,b[i]为点的X轴坐标。(X,Y轴最大为255);我们就可以在这个坐标上等到i个点。每两个相邻的点相连形成一道曲线。注意:是曲线;把这道曲线上的所有点的坐标(取整数)乘以4,(X,Y轴最大为1023)形成一个大曲线。把这个曲线上点的Y坐标(取整数)放到一个数组里面,对应的数是这个点的X坐标
例如: array(10) = 30 ' 有个点的Y坐标为10,X坐标为30
array(20) = 40 ' 有个点的Y坐标为20,X坐标为40动态链接库的目的:知道一个整数(Y坐标)的值。查询array数组,可得到(X坐标)对应的值。
0<i<256 '我们假设i为10吧 ...可以为任意。假设。我们在坐标上,设点,a[i]为点的Y轴坐标,b[i]为点的X轴坐标。(X,Y轴最大为255);我们就可以在这个坐标上等到i个点。每两个相邻的点相连形成一道曲线。注意:是曲线;把这道曲线上的所有点的坐标(取整数)乘以4,(X,Y轴最大为1023)形成一个大曲线。把这个曲线上点的Y坐标(取整数)放到一个数组里面,对应的数是这个点的X坐标
例如: array(10) = 30 ' 有个点的Y坐标为10,X坐标为30
array(20) = 40 ' 有个点的Y坐标为20,X坐标为40动态链接库的目的:知道一个整数(Y坐标)的值。查询array数组,可得到(X坐标)对应的值。
#include "stdafx.h"// 这些是向导生成的不用管
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}// 这个函数是我们要用到的 ,注意这里使用 short 而不是 int
short __stdcall fnLazy(short *px, short *py,short size, short Y)
{
int i;
for(i = 0; i < size ; i++)
{
if(py[i] * 4 == Y)
{
return px[i];
}
}
return 0;
}
然后,新建一个 lazy.def 文件,写入下面两行: EXPORTS
fnLazy编译, 声称一个 dll 文件,现在就可以在 VB 中使用了。我们在 VB 中建立一个窗体,放上一个按钮,一个 textbox ,然后输入下面代码:
' 声明 dll 函数 , 注意写全 dll 的路径,或者把 dll 文件放到当前目录下
' ByRef 用来传递数组给 dll Private Declare Function fnLazy Lib "lazy.dll" (ByRef Xvec As Integer, ByRef Yvec As Integer, ByVal size As Integer, ByVal Y As Integer) As IntegerPrivate Sub Command1_Click()Dim X(3) As Integer
Dim Y(3) As Integer
X(1) = 5
X(2) = 7
X(3) = 10Y(1) = 2
Y(2) = 4
Y(3) = 8i = fnLazy(X(0), Y(0), 3, 16)
Text1.Text = iEnd Sub
执行, 结果应该是 7 -- X(2) , 是不是你要的结果?
vb中新建activex dll 类模块的名称为A,里面写一个函数B,编译生成C.dll
其它的vb程序中,
set obj=createobject("C.A")
msgbox obj.B(参数)
具体的实现代码自己加了
两个数组里面的数一一对应。
设一函数f(A)
A是数组a中的数 ,f(A)=B B为数组b中的数. A,B在数组的位置相同.
例如: 设a(1,4,6,34,63,73,29) , b(2,4,67,156,176,200,234)
f(1)=2
f(4)=4
f(6)=67
f(34)=156
f(63)=176
f(73)=200
f(29)=234把这两个数组里面的数乘以四. a(4,16,24,136,252,292,116)
b(8,16,268,624,704,800,936)现在已知 B在数组b中的位置,求。相对应的位置在数组a中的数.
f(B)=????
比喻f(8)=4
f(16)=16
f(268)=24
f(624)=136
f(704)=252
f(800)=292
f(936)=116
两个数组。a[i],b[i] 0<i<256
数组里面的数范围在0 到 255
在线等
我昨天想了一晚上写出来了
我今天编Activex Dll工程。。
大家也一起试。,
相互学习学习。..,.......Dim a(9) As Integer
Dim b(9) As Integer
Dim var(11)
Dim i As Integer
Dim k As Integer
Dim Q As Integer
Dim myarray()
Dim vararray() As Integer
'***************************************************************
'根据a与b的比例,同a=0 to 256 求相应b的256个数
a(0) = 10
a(1) = 20
a(2) = 50
a(3) = 80
a(4) = 100
a(5) = 120
a(6) = 150
a(7) = 160
a(8) = 200
a(9) = 250b(0) = 30
b(1) = 40
b(2) = 50
b(3) = 60
b(4) = 80
b(5) = 100
b(6) = 120
b(7) = 150
b(8) = 180
b(9) = 200k = 0
' var=b/a
' 当a=1,2,3,4,5,
'b=var*avar(0) = b(0) / a(0)
ReDim Preserve MyArray(a(0) - 1)
For i = 0 To a(0) - 1
MyArray(k) = var(0) * i' Text1.Text = Text1.Text & ", " & MyArray(k)
' textbox 是为了看第一阶段里面数组
k = k + 1
Next i
ReDim Preserve MyArray(a(9))For Q = 1 To 9
var(Q) = Abs(b(Q) - b(Q - 1)) / Abs(a(Q) - a(Q - 1))
For i = a(Q - 1) To a(Q) - 1
MyArray(k) = var(Q) * (i - a(Q - 1)) + b(Q - 1)
' Text2.Text = Text2.Text & ", " & MyArray(k)
' text2box是为了看第二阶段的数组
k = k + 1
Next i
Next Q
ReDim Preserve MyArray(256)var(10) = 256 - b(9) / 256 - a(9)
For i = a(9) To 256
MyArray(k) = var(10) * (i - a(9)) + b(9)
' Text3.Text = Text3.Text & ", " & MyArray(k)
' text3box是为了看第三阶段的数组
k = k + 1
Next i'根据a与b的比例,同a=0 to 256 求相应b的256个数
'***************************************************************MyArray(k)这个数组里面有 256个数现传进一个值X让X与这个MyArray(k)数组里面的数逐个比较。。与相等。。则,求出这个k的值。。传出。。
算法如下:
for i=0 to 256
if MyArray(i)=X then
传出这个 i ..
exit function
end if
next i
MsgBox "sorry ,您所传的数,不在数组中。", vbCritical, "sorry"
end function
大家把这个复制到VB中,就可以了。但是不要忘记了。在公共类中申明。Public MyArray()
Public VarArray() As Integer
'我昨天想了一晚上写出来了??????
'我今天编Activex Dll工程?????
'大家也一起试。,
''相互学习学习。..,.......Public a(9) As Integer
Public b(9) As Integer
Dim var(11)
Dim i As Integer
Dim k As Integer
Dim Q As Integer
Dim MyArray()
Dim VarArray() As Integer
k = 0
' var=b/a
' 当a=1,2,3,4,5,
'b=var*a
Public Function geta() As Integer
var(0) = b(0) / a(0)
ReDim Preserve MyArray(a(0) - 1)
For i = 0 To a(0) - 1
MyArray(k) = var(0) * i' Text1.Text = Text1.Text & ", " & MyArray(k)
' textbox 是为了看第一阶段里面数组
k = k + 1
Next i
ReDim Preserve MyArray(a(9))For Q = 1 To 9
var(Q) = Abs(b(Q) - b(Q - 1)) / Abs(a(Q) - a(Q - 1))
For i = a(Q - 1) To a(Q) - 1
MyArray(k) = var(Q) * (i - a(Q - 1)) + b(Q - 1)
' Text2.Text = Text2.Text & ", " & MyArray(k)
' text2box是为了看第二阶段的数组
k = k + 1
Next i
Next Q
ReDim Preserve MyArray(256)var(10) = 256 - b(9) / 256 - a(9)
For i = a(9) To 256
MyArray(k) = var(10) * (i - a(9)) + b(9)
' Text3.Text = Text3.Text & ", " & MyArray(k)
' text3box是为了看第三阶段的数组
k = k + 1
Next i'根据a与b的比例,同a=0 to 256 求相应b的256个数
'***************************************************************'MyArray(k)这个数组里面有 256个数'现传进一个值X'让X与这个MyArray(k)数组里面的数逐个比较。。与相等。。则,求出这个k的值。。传出。。
'算法如下:
For i = 0 To 256
If MyArray(i) = X Then
'传出这个 i ..
geta = i
Exit Function
End If
Next i
MsgBox "sorry ,您所传的数,不在数组中。", vbCritical, "sorry"
End Function
'大家把这个复制到VB中,就可以了。但是不要忘记了。在公共类中申明。Public MyArray()
Public VarArray() As Integer
Public Sub inter()
'***************************************************************
'根据a与b的比例,同a=0 to 256 求相应b的256个数
a(0) = 10
a(1) = 20
a(2) = 50
a(3) = 80
a(4) = 100
a(5) = 120
a(6) = 150
a(7) = 160
a(8) = 200
a(9) = 250b(0) = 30
b(1) = 40
b(2) = 50
b(3) = 60
b(4) = 80
b(5) = 100
b(6) = 120
b(7) = 150
b(8) = 180
b(9) = 200
End Sub是不是这个意思