读书人

关于VC写的DLL函数被VB6.0调用的有关问

发布时间: 2012-12-17 09:31:40 作者: rapoo

关于VC写的DLL函数被VB6.0调用的问题

在vc写的DLL里面定义Getabc函数有两个参数(其中b是指针的返回参数);

我用c#调用这个DLL的时候,通过 int aa=Getabc(a,ref *b); 这样可以获得函数返回值,以及判断后【b】的值;

但是用VB调用的时候,给*b赋值的时候出错;因为VB6 加了ByVal关键字后,VB会在字符串尾加上Null字符,即自动将VB字符串转换成C-style字符串,然后将指向该串的指针传给DLL。这样赋值的地址就有NULL字符,就出错了。。。

知道出错的原因,真心不知道该怎么修改,请各位高手不吝赐教,小弟先行谢过!!!!!
email: woshinide1983@163.com


VC里定义的函数:
--------------------------------------------
extern "C" __declspec(dllexport) int _stdcall Getabc(double a,double *b);
int _stdcall Getabc(double a,double *b);
{
if(a>100)
{
*b = 101;
return 1;
}else if( a < 100)
{
*b = 99;
return 0;
}else
{
*b = 100;
return 0;
}
}
--------------------------------------------
VB里面的调用
---------------------------------------------
Private Declare Function Getabc Lib "abc.dll" Alias "_Getabc@56" (ByVal a As Double, ByVal b As Long) As Integer

Private Sub Command1_Click()

Dim b As Long
Dim aa As Integer

aa = Getabc (99, ByVal b)
If aa > 0 Then
MsgBox ("aaaaa")
Else
if(b == 100)
{
MsgBox ("bbbbbbb")
}else
{
MsgBox ("ccccccc")
}
End If
End Sub
------------------------------





[最优解释]


'传地址用ByRef
Private Declare Function Getabc Lib "abc.dll" Alias "_Getabc@56" (ByVal a As Double, ByRef b As Double) As Integer
'或什么都不加,默认是ByRef的
'Private Declare Function Getabc Lib "abc.dll" Alias "_Getabc@56" (ByVal a As Double, b As Double) As Integer

Private Sub Command1_Click()

Dim b As Double
Dim aa As Integer

aa = Getabc (99, ByVal b)
If aa > 0 Then
MsgBox ("aaaaa")
Else
if(b == 100)


{
MsgBox ("bbbbbbb")
}else
{
MsgBox ("ccccccc")
}
End If
End Sub


[其他解释]
引用:
Visual Basic code?123456789101112131415161718192021222324'传地址用ByRefPrivate Declare Function Getabc Lib "abc.dll" Alias "_Getabc@56" (ByVal a As Double, ByRef b As Double) As Integer'或什么都不……


aa = Getabc (99, b)
[其他解释]
引用:
引用:
Visual Basic code?123456789101112131415161718192021222324'传地址用ByRefPrivate Declare Function Getabc Lib "abc.dll" Alias "_Getabc@56" (ByVal a As Double, ByRef b As Double) As Integer……


我也是这样写的,但是还是不对的,原因就是因为在C里面接受到的地址多了一个NULL空字符,所以没法再C里面给这个地址赋值,看图

读书人网 >VC/MFC

热点推荐