1 2 3 4 下一页  [前言:]在这个专题中我收集了一些在Visual Basic编程中的常见问题,这些问题均来自论坛,本专题以解决实际问题主要目的。
问:VB中如何使用C++类?
答:把vc的类编译成dll文件,这样的话就可以使用,最好是作为组件com来使用。
VB调用DLL的方法和调用Windows API的方法是一样的,一般在VB的书中有介绍。对于上面一个例子,先要声明VC函数:
| Declare Function sample Lib "mydll.dll" (ByVal nLen As Integer, buffer As Integer) As Integer | 这里mydll.dll是你的dll的名字。你可能已经注意到了两个参数的声明有所不同,第一个参数加上了ByVal。规则是这样的:如果在VC中某个参数声明为指针和数组,就不加ByVal,否则都要加上ByVal。在VB中调用这个函数采用这样的语法:
sample 10, a(0)
这里的a()数组是用来存放数据的,10为数组长度,这里的第二个参数不能是a(),而必须是要传递的数据中的第一个。这是VB编程的关键。
下面在说几个可能遇到的问题。一个问题是VB可能报告找不到dll,你可以把dll放到system目录下,并确保VB的Declare语句正确。另一个问题是VB报告找不到需要的函数,这通常是因为在VC中*.def文件没设置。第三种情况是VB告诉不能进行转换,这可能是在VC中没有加上__stdcall关键字,也可能是VB和VC的参数类型不一致,注意在VC中int是4个字节(相当于VB的Long),而VB的Integer只有2个字节。必须保证VB和VC的参数个数相同,所占字节数也一致。最后一个要注意的问题是VC中绝对不能出现数组越界的情况,否则会导致VB程序崩溃。
问:怎样用编程方式在窗体上创建一个label或textbox?
答:代码如下:
'声明 Private WithEvents NewButton As ComandButton '1,添加 Set NewButton=Controls.Add("VB.CommandButton","cmdNew",Me) NewButton.Move 0,0,Width,Height NewButton.Visible=True
'2,删除 Controls.Remove NewButton Set NewButton=Nothing | 问:如何把一个已编译的EXE程序打包到VB中再编译呢?
答:你需要先编写一个程序B,并将其编译为EXE。如果你希望今后允许程序A定制程序B的某个文本框,可以先将该文本框的Caption属性设置为“Change Me!Change Me!”之类首先定义好的字符串。然后程序A以二进制方式打开程序B,然后在其中查找“Change Me!Change Me!”字符串,并将其改变为程序A中设置的文字。但这种方法有几个缺点:
1、字符串长度有限;
2、对于VB来说,编译后有的中文字符串编译后格式有些办法,不好处理。
也可以采用另一种办法。程序A将设置信息保存在程序B文件的尾部。用程序B以二进制方式打开其自己的EXE文件,利用Seek命令移动到指定位置读出设置信息。如:
Dim s As String * 100
On Error GoTo ErrHandler Open App.Path + "\" + App.EXEName + ".EXE" For Binary As #1 Seek 1, 20480 ' 这里是EXE文件的长度 Get 1, , s Label1.Caption = s Close #1 Exit Sub | 问:如何确定EXE文件的长度的具体数值呢?
答:先编译程序B,看看程序B的EXE文件的长度,例如17234。然后将上面的20480改为17234,再编译一次程序B。
1 2 3 4 下一页 |