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

woshinide1983 2012-11-15 10:01:26

在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
------------------------------------------------------------------




...全文
94 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshinide1983 2012-11-16
  • 打赏
  • 举报
回复
引用 2 楼 stjay 的回复:
引用 1 楼 stjay 的回复:
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里面给这个地址赋值,看图
stjay 2012-11-15
  • 打赏
  • 举报
回复
引用 1 楼 stjay 的回复:
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)
stjay 2012-11-15
  • 打赏
  • 举报
回复

'传地址用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

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧