首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2012-12-17 
关于VC写的DLL函数被VB6.0调用的问题在vc写的DLL里面定义Getabc函数有两个参数(其中b是指针的返回参数);我

关于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里面给这个地址赋值,看图

热点排行