精华内容
下载资源
问答
  • 再看第10行,对于过程B,它的参数传递方式使用了ByVal关键字(即传值) 对于ByVal(传值),参数t和x根本就是不相关的两个变量。就如同两个人一样(以甲、乙为例),起初甲有两个苹果,然后甲告诉乙,你现在也有两个...
    1    Private Sub Form_Load()
    2            Dim x As Integer
    3            x = 2
    4            A x
    5            Debug.Print x
    6    End Sub
    7    Sub A(ByRef t As Integer)
    8            t = t - 1
    9    End Sub
    10    Sub B(ByVal t As Integer)
    11            t = t - 1
    12    End Sub
    13    Sub C(t As Integer)
    14            t = t - 1
    15    End Sub
    这是一个极为简单的Toy程序(呵呵,就是小玩具),不过他却体现了传值和传引用的巨大区别。
    第7、10、13行分别是一个过程,这些过程都实现了同一功能,即将参数t的值减一。
    在窗体的Load事件中,我们定义了一个变量x,然后调用第一个过程(A),注意到第7行中的参数列表中ByRef关键字,它代表传引用。
    对于传引用,参数t 和 x其实就是一个变量。就像人有大名也可能有外号的道理一样。现在对于变量x,它的大名是x,外号是t。那么t-1其实就是x-1.最后打印出来的结果是x-1=1.
    再看第10行,对于过程B,它的参数传递方式使用了ByVal关键字(即传值)
    对于ByVal(传值),参数t和x根本就是不相关的两个变量。就如同两个人一样(以甲、乙为例),起初甲有两个苹果,然后甲告诉乙,你现在也有两个苹果了,于是乙乐呵呵的拿着两个苹果去过程B中,过程B的作用是将乙的苹果数减一,那么最后程序所要打印的是甲的苹果数,显然,苹果数2。根本没发生变化。那么有的朋友会问,这时乙的苹果数是1吧。答案是错的。对于变量,它是有生命周期的(在编程中叫做变量的作用域)。上面的代码中,变量x的有效期从Form_Load事件激活开始,到End Sub(也就是这个事件结束时)为止。而变量t的有效期从过程的第一句开始,到End Sub为止。一旦超过这个有效期,变量的值就不复存在了。所以,如果想要打印出乙的苹果数,只能在使用该变量的过程中打印,超出这个过程对该变量的任何操作都是毫无意义的。
    展开全文
  • 关于VB的指针以及VB和C/C++间的参数传递

    千次阅读 多人点赞 2012-10-14 14:57:06
    首先,我们使用C/C++创建一个WIN32 DLL,这样VB才可以使用C/C++的代码。 此前我对DLL导出函数已有专文讲述,这里就不再赘述,当然为了各位能够去验证,我还是把步骤截图上来: 打开VC6,新建一个Win32 DLL工程...

    首先,我们使用C/C++创建一个WIN32 DLL,这样VB才可以使用C/C++的代码。

    此前我对DLL导出函数已有专文讲述,这里就不再赘述,当然为了各位能够去验证,我还是把步骤截图上来:

    打开VC6,新建一个Win32 DLL工程(使用VS.NET的朋友因为有中文版MSDN我就不截图了,我也不喜欢用.NET)

    选择空白的DLL就可以了,代码我们自己写。

    创建头文件和代码文件,其实最重要的是#include <windows.h>,标准化吧。

    创建模块定义文件(关于.DEF文件上一篇已经有说明)

    头文件的代码如下:

    #ifndef __HOOK_H_
    #define __HOOK_H_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    #define WIN32_LEAN_AND_MEAN
    //#define EXPORT_API extern "C" __declspec(dllexport)
    #define EXPORT_API __declspec(dllexport)
    
    #include <windows.h>	// ...
    
    typedef union _unTagPack{
    	BYTE Byte;
    	SHORT Integer;
    	LONG Long;
    	DWORD Pointer;
    	float Single;
    	double Double;
    	char Text[256];
    }TAGPACK, *PTAGPACK;
    
    /*
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    */
    
    #endif


    程序代码如下:

    #include "Hook.h"
    
    BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
    {
    	switch(ul_reason_for_call )
    	{
    	case DLL_PROCESS_ATTACH:
    		break;
    	case DLL_THREAD_ATTACH:
    	case DLL_THREAD_DETACH:
    	case DLL_PROCESS_DETACH:
    		break;
    	}
    	return TRUE;
    }
    
    EXPORT_API DWORD __stdcall fnHook(DWORD dwIndex)
    {	return dwIndex;
    }
    
    EXPORT_API DWORD __stdcall fnVarptr(void *dwArg, DWORD dwFlag)
    {	TAGPACK Arg;
    	switch(dwFlag)
    	{	
    	case 0:
    		Arg.Pointer = (DWORD)dwArg;
    		Arg.Byte = *(BYTE*)dwArg;
    		break;
    	case 1:
    		Arg.Pointer = (DWORD)dwArg;
    		Arg.Integer = *(SHORT*)dwArg;
    		break;
    	case 2:
    		Arg.Pointer = (DWORD)dwArg;
    		Arg.Long = *(LONG*)dwArg;
    		*(LONG*)dwArg = 0x10000000;
    		break;
    	case 3:
    		Arg.Pointer = (DWORD)dwArg;
    		Arg.Single = *(float*)dwArg;
    		break;
    	case 4:
    		Arg.Pointer = (DWORD)dwArg;
    		Arg.Double = *(double*)dwArg;
    		break;
    	case 5:
    		Arg.Pointer = (DWORD)dwArg;
    		Arg.Pointer = *(DWORD*)dwArg;
    		strcpy(Arg.Text, (const char*)dwArg);
    		break;
    	}
    	//*dwArg = 0x80000001;
    	return 0;
    }


    模块定义文件输出这两个函数就可以了。

    EXPORTS
    fnHook
    fnVarptr


    那么,我们给两个函数做个断点,方便等下调试。

     

    OK!现在我们编写VB的代码,并生成Project1.exe,就一个窗口:

    Option Explicit
    
    Private Declare Function fnHook Lib "Hook.dll" (ByVal dwIndex As Long) As Long
    Private Declare Function fnVarptr Lib "Hook.dll" (ByVal dwPtr As Long, ByVal dwFlag As Long) As Long
    
    Private Type T_ARG
        b As Byte
        i As Integer
        l As Long
        s As Single
        d As Double
        t(32) As Byte
    End Type
    
    Dim a As T_ARG
    
    Private Sub Form_Load()
        '
        Dim ret As Long, s As String
        a.b = 255
        a.i = 32767
        a.l = &H7FFFFFFF
        a.s = 12345.6789
        a.d = 0.123456789
        a.t(0) = Asc("D")
        a.t(1) = Asc("L")
        a.t(2) = Asc("L")
        a.t(3) = 0
        s = "Fuck You!"
        
        Call fnHook(0)
        ret = fnVarptr(VarPtr(a.b), 0)
        Call fnHook(1)
        ret = fnVarptr(VarPtr(a.i), 1)
        Call fnHook(2)
        ret = fnVarptr(VarPtr(a.l), 2)
        Call fnHook(3)
        ret = fnVarptr(VarPtr(a.s), 3)
        Call fnHook(4)
        ret = fnVarptr(VarPtr(a.d), 4)
        Call fnHook(5)
        ret = fnVarptr(VarPtr(a.t(0)), 5)
        Call fnHook(6)
        ret = fnVarptr(StrPtr(s), 5)
        Call fnHook(7)
    End Sub

    现在,我们在VC++的环境中配置好Project1.exe的路径,F5直接运行就会在这个断点停下:

    你可能已经明白,这个函数只是方便我们定位VB的代码。不错,看汇编窗口的代码:

    17:   EXPORT_API DWORD __stdcall fnHook(DWORD dwIndex)
    18:   {   return dwIndex;
    10001070   push        ebp
    10001071   mov         ebp,esp
    10001073   sub         esp,40h
    10001076   push        ebx
    10001077   push        esi
    10001078   push        edi
    10001079   lea         edi,[ebp-40h]
    1000107C   mov         ecx,10h
    10001081   mov         eax,0CCCCCCCCh
    10001086   rep stos    dword ptr [edi]
    10001088   mov         eax,dword ptr [ebp+8]
    19:   }
    1000108B   pop         edi
    1000108C   pop         esi
    1000108D   pop         ebx
    1000108E   mov         esp,ebp
    10001090   pop         ebp
    10001091   ret         4

    呵呵,所以说不是必要最好别定义函数,你至少多有10条汇编指令要运行。而且,这只是在C/C++。

    一旦运行到ret 4,以后的代码就是VB的代码了。

    当然,我们“装”聪明一点,跳开这个函数回到主调函数,那么主调函数的代码就是VB的代码(DLL函数是VB调用的)。

    比如第一次传入一个Byte的时候:

    00401B43   push        0
    00401B45   call        004018B0
    00401B4A   mov         esi,dword ptr ds:[401014h]
    00401B50   call        esi
    00401B52   mov         edx,dword ptr [ebp-34h]
    00401B55   mov         edi,dword ptr ds:[40105Ch]
    00401B5B   push        edx
    00401B5C   call        edi
    00401B5E   push        0
    00401B60   push        eax
    00401B61   call        004018F4
    00401B66   call        esi
    00401B68   push        1
    00401B6A   call        004018B0

    也许你会认为,这个004018B0就是fnHook的地址,其实不是。从上面的汇编代码我们已经知道它的地址是10001070。

    那么为什么不是PUSH 0,然后CALL 10001070呢?这是因为VB调用DLL是DllFunctionCall来完成的。

    VB跟.NET一样,应该说.NET跟VB一样在虚拟机环境中运行,它编译后的代码很接近机器码。

    这跟VB的历史有关,VB是伴随着ActiveX技术发展起来的,它的成功远超出了微软的预料,这也是.NET借鉴它的原因之一。

    点到为止,回到正题。

     

    我们不管此CALL 004018B0后做什么样的操作,最终都是调用fnHook然后返回,那么我们就得到了VB代码所对应的汇编代码:

    00401B68   push        1
    00401B6A   call        004018B0
    00401B6F   call        esi
    00401B71   mov         eax,dword ptr [ebp-38h]
    00401B74   push        eax
    00401B75   call        edi
    00401B77   push        1
    00401B79   push        eax
    00401B7A   call        004018F4
    00401B7F   call        esi
    00401B81   push        2
    00401B83   call        004018B0
    00401B88   call        esi
    00401B8A   mov         ecx,dword ptr [ebp-3Ch]
    00401B8D   push        ecx
    00401B8E   call        edi
    00401B90   push        2
    00401B92   push        eax
    00401B93   call        004018F4
    00401B98   call        esi
    00401B9A   push        3
    00401B9C   call        004018B0
    00401BA1   call        esi
    00401BA3   mov         edx,dword ptr [ebp-40h]
    00401BA6   push        edx
    00401BA7   call        edi
    00401BA9   push        3
    00401BAB   push        eax
    00401BAC   call        004018F4
    00401BB1   call        esi
    00401BB3   push        4
    00401BB5   call        004018B0
    00401BBA   call        esi
    00401BBC   push        ebx
    00401BBD   call        edi
    00401BBF   push        4
    00401BC1   push        eax
    00401BC2   call        004018F4
    00401BC7   call        esi
    00401BC9   push        5
    00401BCB   call        004018B0
    00401BD0   call        esi
    00401BD2   mov         eax,dword ptr [ebp-44h]
    00401BD5   push        eax
    00401BD6   call        edi
    00401BD8   push        5
    00401BDA   push        eax
    00401BDB   call        004018F4
    00401BE0   call        esi
    00401BE2   push        6
    00401BE4   call        004018B0
    00401BE9   call        esi
    00401BEB   mov         ecx,dword ptr [ebp-1Ch]
    00401BEE   push        ecx
    00401BEF   call        dword ptr ds:[40105Ch]
    00401BF5   push        5
    00401BF7   push        eax
    00401BF8   call        004018F4
    00401BFD   call        esi
    00401BFF   push        7
    00401C01   call        004018B0
    00401C06   call        esi
    00401C08   mov         dword ptr [ebp-4],0
    00401C0F   wait

    代码中CALL esi及以后的东西是VB自己生成的指令,我们不用理会。

    好,注意下第一次传递Byte时候汇编代码的红色部分,所调用的函数会变代码是这样的:

    7345C195   push        esi
    7345C196   call        dword ptr ds:[7339122Ch]
    7345C19C   push        dword ptr ds:[7349EF94h]
    7345C1A2   mov         esi,eax
    7345C1A4   call        dword ptr ds:[73391278h]
    7345C1AA   mov         dword ptr [eax+9Ch],esi
    7345C1B0   pop         esi
    7345C1B1   ret


    注意红色那行,起跳转到这里执行:

    7C92FE01   mov         eax,fs:[00000018]
    7C92FE07   mov         eax,dword ptr [eax+34h]
    7C92FE0A   ret

     

    第二个CALL,我们不去理会它,你也可以继续跟踪,不过现在我们已经有了答案:

    就是它就是VarPtr(),我们看VB IDE中函数的提示:


    Ptr As Any中的Any就好比C/C++中的void*指针,既然是这样,就不能说VB完全不支持指针,而是把它和谐了。

    当然,就一此说VB支持指针,也是错的。我们无法用*ptr = value 来操作指针,也无法给指针赋值。

    然而,通过VarPtr我们得到了指针的值,把它传递给C/C++,我们看下以此传递进来后C/C++处理的结果:

    将Byte的值传递给共用体的Byte成员。

     

    将Integer赋值给共用体成员。

     

    类似的Long也是一样:

     

    单精度浮点型。

    这里也许你会发现,VB中的12345.6789变成了12345.7,为什么?

    这跟浮点型的存储方式有关,这里就不详细讲了。不过一点是,不要把long直接用内存复制(包括指针转换),赋值给Single

    反之也是一样。虽然两者使用的内存都是4个字节。

     

    双精度浮点型。

    赋值后:

     

    字符串,直接把字节数组传递进来:

     

    字符串,用StrPtr传递的结果有所不同

    少尉有点功底的都知道,这是Unicode编码的字符串。我们的DLL中使用strcpy,对此我们应该使用另外一个函数:wcscpy

     

    最关键的是,到这里我们已经认识到,VB所谓VarPtr只是把指针搞成一个Long,字符串就多一点玄机。

    只要认识到这一点,那么在处理VB和C/C++的DLL中数据的交换,或者换个说法叫函数调用,就了然了。

    你还可以再去验证,把Byval As String传递给char*或者const char*是完全OK的。

     

    Doc End!

    展开全文
  • 委托调用多线程传递参数vb.net vb.net多线程通过Deletgrate委托调用传递参数 实现多线程调用中变量和参数的传入和传出。 原创代码,亲测有效!
  • vb.net多线程传递参数,通过class类。可以实现超线程调用sub时,参数和变量的传递 vb.net多线程传递参数,通过class类。可以实现超线程调用sub时,参数和变量的传递
  • 传递(Byval)和按地址传递(ByRef)---参数传递

    千次阅读 热门讨论 2012-08-08 11:25:21
    按地址传递 学到现在了,仔细想想还是很模糊,从开始接触C++中的参数传递,只知道有这么个东西,但你要是让我说明白,有点够呛,在编程序的时候呢都是记住了一些写法才不会出错,紧接着学习C语言,Java都是如此,最近...

    在接触了这么多的编程语言后,似乎每个语言都要涉及到参数的传递,而参数传递过程中的两种传递方式:


    按值传递  


    ②按地址传递


    学到现在了,仔细想想还是很模糊,从开始接触C++中的参数传递,只知道有这么个东西,但你要是让我说明白,有点够呛,在编程序的时候呢都是记住了一些写法才不会出错,紧接着学习C语言,Java都是如此,最近由于学习的需要,我要进行VB的一些学习,对于这个似乎忽然理解了 下面就是我自己的一些理解,在此分享一下

     

     按值传递:在过程被调用时,传递给形参的是调用过程中的相应实参的值,形参与实参各占有不同位置的储存空间,被调用过程在执行过程中,改变了形参变量的值,但不会调用过程的实参值。


    按地址传递:就是当调用一个过程时,是把实参变量的内存地址传递给被调用过程的形参,也就是说形参与实参使用相同地址的内存单元。因此当在被调用过程中改变形参的值,就等于改变了实参的值。


    PS:其实我个人认为就像两个小孩,都有自己的家,按值传递的就像是一个小孩去另一个小孩家玩,玩一段时间还是要回自己各自的家,而他们俩的家却没啥联系,一点没变,还在那呢  而按地址传递呢,就像是假如其中一个小孩的家发大水啦,然后这个小孩无家可归了,于是被另外一个小孩家收留了,这个小孩带着自己东西去那个小孩家,这时两个小孩拥有的是相同的一个家,他们俩就有联系了,因为那个小孩的家换成另外一个了.(不知道举得例子是否恰当)

    指针相信学习编程的人都知道吧,那么看看下面的例子

      按值传递时,实质上实参a只是把一个副本传递给形参x,也可以直接理解为传递的结果是让x*2中的x的值等于10(即a的值),乘以2后再赋值(赋值不用解释吧)给x,即实际上w方法的运算并没有对a本身进行操作。所以调用w方法前后a值始终等于10,而w方法得到的结果是20


    按址传递时,实质上实参a是把指针(地址)传递给形参x,这个指针指向的地址的值即是10,此时a与x分别有一个指针同时指向10所在地址,即实际上w方法对a本身直接进行了操作(a自身参与运算)。所以调用w方法前后a值分别等于10和20,而w方法得到的结果是依然是20。


     

    在比如拿VB中的例子来说

     

    按地址传递

    Functionfun(x As Integer, y As Integer) As Integer
    x = x * y
    If x<> 0 Then
    fun = x
    Else
    fun = y
    End If
    EndFunction
    Private SubCommand1_Click()
    Dim a AsInteger, b As Integer
    a = 2
     b = 3
     Text1.Text = fun(a, b)
     Text2.Text = fun(a, b)
     Text3.Text = fun(a, b)
     Text4.Text = fun(a, b)
    End Sub

    下面是运行的结果,通过结果可以看出,这个是按值传递的, 每一次运算后a的值都在变化。




    按值传递


    Subtext(ByVal x As Integer, ByVal y As Integer)
    x = x * 5
    y = y / 5
    Print"x="; x, "y= "; y
    End Sub
    Private SubCommand1_Click()
    Dim a AsInteger, b As Integer
    a = 10
    b = 90
    text a, b
    Print"a="; a, "b="; b
    End Sub

    由运行结果可以看出,尽管x,y的值经过运算后发生了变化,但是a,b的值仍然没有改变,这就是按值传递的小例子,就像上面图解的那样,传递过去的只是一个副本,而本身没有发生任何变化


    通过例子的观察和理解相信不懂参数传递的你也会和我一样理解了吧

    展开全文
  • VB急速屏幕传递

    2012-11-07 16:06:47
    VB编写的远程屏幕监控程序,传输速度快,并且有远程控制功能,值得下载。
  • 之前我们看到用VB.NET调用Excel VBA的例子比较多,本次是使用VB.NET向Word VBA传递参数,并调用Word VBA生成Word报告或PDF文档。 在Word VBA中,可访问数据库,获得自己想展示的数据,灵活度比较高。 运行环境:VS...
  • VB调用VC 生成的dll里面的参数传递为结构体。
  • value types + reference types reference types: variable store a reference to an object object is created using New variable/reference is stored on Stack, object is stored on Heap ...

    value types + reference types

    reference types:
    variable store a reference to an object
    object is created using New
    variable/reference is stored on Stack, object is stored on Heap

    Dim e1 As New Employee("Scott",True)
    Dim e2 As Employee=e1
    e2.Name="Rob"
    Dim e3 As Employee = Nothing
    Console.WriteLine(e1.GetDescription())'Rob
    Console.WriteLine(e2.GetDescription())'Rob
    Console.WriteLine(e3.GetDescription()) '?

    p.s.
    string type is a reference type, but the behaves like a value type

    pass value type by value: value type pass a copy of value
    pass reference type by value: reference type pass a copy of reference
    pass value type by reference
    pass reference type by reference 'fairly uncommon

    Sub Main()
      Dim y As Integer = 5
      Foo(y)
      Console.WriteLine(y) '5

      Dim emp As New Employee("Rob", False)
      Bar(emp)
      Console.WriteLine(emp.Name) 'Scott 'Rob

      Dim y As Integer = 5
      Foo2(y)
      Console.WriteLine(y) '10

      Dim emp As New Employee("Rob", False)
      Bar2(emp)
      Console.WriteLine(emp.Name) 'Scott 'Kate
    End Sub

    Sub Foo(ByVal x As Integer)
      x += 5
    End Sub
    Sub Bar(emp As Employee)
      'emp.Name = "Scott" 'Scott
      emp = New Employee("Scott", True) 'Rob
    End Sub

    Sub Foo2(ByRef x As Integer)
      x += 5
    End Sub
    Sub Bar2(ByRef emp As Employee)
      emp.Name = "Scott" 'Scott
      emp = New Employee("Kate", True) 'Kate
    End Sub

    展开全文
  • 1、运行效果 2、程序代码 Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As ...Private Sub ...
  • 有多种方法可以在窗口之间传递数据,比如: 1、在模块文件(Module)中声明一个全局公共变量,然后在其他窗体中就可以通过这个变量来存取数据了,如: 在模块文件中声明变量a Public a as string 在Form1中给a赋值 a...
  • <VB.NET>自定义控件传递事件

    千次阅读 2018-02-01 10:33:47
     WithEvents TextBoxPluss As TextBox 'WithEvent一个TextBox控件,因为自定义控件中需要传递的事件为TextBox的事件  Private Sub TextBoxPlus_KeyPress(ByVal sender As System.Object, ByVal e As System....
  • VB通过串口传递数据

    2011-06-18 18:26:13
    通过串口传递数据通过串口传递数据通过串口传递数据通过串口传递数据通过串口传递数据通过串口传递数据通过串口传递数据通过串口传递数据通过串口传递数据通过串口传递数据
  • 简介:由于要开发一个软件,其中用com在VB与VC间传递结构体数组,在网上找了很久没有成功,后来在国外一网站找到了,并且按照其中的关键步骤操作成功了。由于原文是英文的,没有精力去翻译,于是用网页翻译了...
  • vb.net调用易语言dll,返回文本型参数不可用,通过内存读取进行文本型数据返回。 通过在易语言dll脚本中写入内存数据,然后在vb.net中读取指定内存数据来进行文本型字节集型数据交互。
  • VB过程中使用的参数分为实参和形参,...当调用一个有参数的过程时,形参和实参逐一匹配传递,根据传递方式不同,可分为值和按地址两种。对参数传递方式的正确判别是过程学习中的一个难点,也是等级考试中的一个考点
  • access服务器和客户端源码,客户端可以发送查询给服务器,服务器把查询的结果发给客户端。不懂的MM我。
  • VB 6.0 数组参数调用实例:  Dim A1(), B1(), C1() '声明数组  Private Sub Form_Load()  Dim i As Integer '给数组赋初值  Show  A1 = Array(2, 4, 6, 8, 10) '用Array函数赋值  B1 = Array(1, 3, 5, 7, 9, ...
  • VB和VC 结构体Dll参数传递VB中的结构体作为参数,传递VC中的结构体dll
  • VB与VC通过COM互传结构体数组,非常好的例子,在网上找了很久,相关资源很少,且都没有成功,最后在国外一网站找的,增加了简单测试,保证成功,首发CSDN
  • 本文介绍如何将数组从VC ++ DLL传递VB
  • VB编程:利用Object变量传递参数-21

    千次阅读 2016-11-21 15:14:39
    运行效果: 程序代码: Private Sub Command1_Click()  Dim i As Object  Set i = Text1  i.Text = "传递参数" End Sub
  • VB.net socket屏幕传输

    2015-06-15 21:14:15
    VB.net做的sockets演示,实时截取电脑上的屏幕选取并传输到客户端上 分为recorder和player两个程序
  •  1)ByRef 地址传递参数在 VB 中是缺省的  按地址传递参数后,过程返回的也是地址,函数中改变了的变量值也将带回来。  2)ByVal 关键字指出参数是值来传递的  传递参数时,传递的只是变量的副本。
  • VB参数传递方式判别与解题应用[汇编].pdf
  • vb传递二维数组作为参数

    千次阅读 2018-01-03 09:55:00
    VB 中一个二维数组给一个函数作为参数,您可以参考以下代码: Private Sub Command1_Click () Dim abc ( 1 , 2 ) As Integer abc ( 0 , 0 ) = 1 abc ( 0 , 1 ) = 2 abc ( 0 , 2 ) = 3 abc ( 1 ,...
  • VB传值和传地址问题

    千次阅读 2015-10-17 19:43:29
    vba 传递参数值时,分为Byval 和Byref 参数分为形参和实参, ...Byref,地址传递参数,传递的是地址,过程操作的是变量的地址 Byval,值传递参数,将变量的内容复制了一遍,过程操作的是另外一个变量
  • VB参数传递(传值ByVal与传址ByRef)[整理].pdf
  • vb函数参数的传递

    万次阅读 2005-06-16 12:18:00
    实际上,形参的完整的语法格式应该为:[[Optional][ByVal|ByRef]|ParamArray] > [()][As 类型>][=缺省值>]ByVal表示该参数传递,简称值参。此时形参与实参各占一个独立的存储空间,形参的存储空间是调用时才分配...
  • 本实验代码.清晰的阐释了. ...在VC里面的字节数组指针,传递VB6里面,如何通过LONG 的变量来接受, 便于VC6工程转VB6工程使用.对于数组指针拷贝不熟悉的朋友也可以参考. 代码都是我亲自测试!非常棒.!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,743
精华内容 13,097
关键字:

vb按地址传递