C++动态库
//------------------------------------
#define __DLLEXP extern "C" __declspec(dllexport)
typedef void(__stdcall*MDCallBack)(int &a, int &b);__DLLEXP int __stdcall sum(int a,int b,MDCallBack pcall){
int c=a*b,d=a-b;
pcall(c,d);
return a+b;
}
//------------------------------------------//vb 中是这样调用的,怎么也不成功,不知道要怎么才能取得a b的值
Private Declare Function sum Lib "cdll.dll" (ByVal a As Integer, ByVal b As Integer, ByVal lpCallBack As Long) As IntegerFunction MyCallBack(ByVal a As Integer, ByVal b As Integer) As Integer
Text3.Text = a
Text4.Text = b
End FunctionPrivate Sub Command1_Click()
Dim t1 As Integer
t1 = sum(12, 22, MyCallBack)End Sub
//------------------------------------
#define __DLLEXP extern "C" __declspec(dllexport)
typedef void(__stdcall*MDCallBack)(int &a, int &b);__DLLEXP int __stdcall sum(int a,int b,MDCallBack pcall){
int c=a*b,d=a-b;
pcall(c,d);
return a+b;
}
//------------------------------------------//vb 中是这样调用的,怎么也不成功,不知道要怎么才能取得a b的值
Private Declare Function sum Lib "cdll.dll" (ByVal a As Integer, ByVal b As Integer, ByVal lpCallBack As Long) As IntegerFunction MyCallBack(ByVal a As Integer, ByVal b As Integer) As Integer
Text3.Text = a
Text4.Text = b
End FunctionPrivate Sub Command1_Click()
Dim t1 As Integer
t1 = sum(12, 22, MyCallBack)End Sub
ShowMessage(a);
t1 = sum(12, 22, AddressOf MyCallBack)
Private Declare Function sum Lib "cdll.dll" (ByVal a As Long, ByVal b As Long, ByVal lpCallBack As Long) As Long
Private Sub Command1_Click()
Dim t1 As Integer
t1 = sum(12, 22, MyCallBack)
End Sub
'模板中代码
Public Function MyCallBack(ByVal a As Long, ByVal b As Long)
msg = MsgBox(a)
End Function程序通过了,但显示数据不对,并且显示数据后直接退出。
请各位大虾们不吝赐教。
运行时错误 '91'
未设置对象变量或 with block 变量。然后就直接退出程序了。
msg = MsgBox(a)
End submsg 是什么东东?定义了没?
Public Function mCallBack(ByVal c As Long, ByVal d As Long)
MsgBox (c)
MsgBox (d)
End Function
Private Sub Command1_Click()
Dim t1 As Integer
t1 = sum(6, 6, AddressOf mCallBack)
MsgBox (t1)
End Sub
然后就报运行时错误 '91'
未设置对象变量或 with block 变量。然后就直接退出程序了。
如果你vb中这样定义的函数
Function MyCallBack(ByVal a As Integer, ByVal b As Integer) As Integer
那么C++就该这么定义它的函数指针
typedef int(__stdcall *MDCallBack)(int a, int b);如果你vb中这样定义的函数
Function MyCallBack(ByRef a As Integer, ByRef b As Integer) As Integer
那么C++就该这么定义它的函数指针
typedef int(__stdcall *MDCallBack)(int *a, int *b);ByVal 是值传递 ByRef 是地址传地
#define __DLLEXP extern "C" __declspec(dllexport)
typedef void(__stdcall*MDCallBack)(int a, int b);__DLLEXP int __stdcall sum(int a,int b,MDCallBack pcall){
int c=a*b,d=a-b;
pcall(c,d);
return a+b;
}Option ExplicitPrivate Declare Function sum Lib "ddlSum.dll" Alias "_sum@12" _
(ByVal a As Long, ByVal b As Long, ByVal lpCallBack As Long) As LongPublic Sub pSum()
sum 10, 5, AddressOf pcall
End SubPrivate Function pcall(ByVal a As Long, ByVal b As Long) As Long
MsgBox "a:" & CStr(a) & "b:" & CStr(b)
pcall = 2
End Function