在VB和DLL间传递字符串
来源:互联网 发布:vanelife软件 编辑:程序博客网 时间:2024/06/05 22:51
用VB调用VC编写的DLL时,必须注意参数的匹配。VC中的变量,都是采用的32位,而VB中的,很多是16位,这就要进行相应的转化。转化的法则很多地方都有。我这里建议大家尽量使用VB,VC中都有,而且一致的变量。比如long型和double型。如果可能,尽量采用这些简单的变量类型。可以省缺很多麻烦。
要注意,传递变量值,在VB声明函数是,变量前加ByVal限定字,如果传递指针,要加ByRef限定字。默认为ByRef。
VB和DLL之间传递字符串的情况:
1。从VB传入字符串到DLL
比如下面的函数FuncA,传入字符串到DLL中,在VB中注意要用ByVal声明变量。声明为String型。
Public Declare Function FuncA Lib "***.dll" (ByVal strS As String) As Boolean
在DLL中,
Bool WINAPI FuncA(LPSTR strS)
{
// 在这里可以直接使用strS
return TRUE;
}
2。从DLL中传出字符串到VB
VB中的声明:
Public Declare Function FuncB Lib "***.dll" (ByVal strS As String) As Boolean
是不是和上面的声明一样,呵呵,没写错,就是一样的。
在DLL中,
Bool WINAPI FuncB(LPSTR strS)
{
*****
// 在程序的最后,可以返回strS。
return TRUE;
}
在这里要注意的是,在VB中要先对strS进行初始化。给strS分配大小。例如,strS = Space$(260) ,这条语句,给strS分配了260个字符的大小。在DLL的函数中,要注意返回的strS的大小,不能超过这个限定。最好能做个判断。比较麻烦,但也没办法,申请个大点的空间吧。
还有一点要注意的是,在DLL中的FuncB中,千万不要对strS进行可能产生地址变更的操作!否则,strS的值不能返回到VB中。最好是在FuncB中使用临时的变量进行操作,程序的最后,把临时变量的值拷贝到strS中去。这样保险,以免出错。
BOOL WINAPI FuncB( LPSTR strS)
{
LPSTR temp;
在这里,对temp变量进行操作,程序的最好,把temp的值拷贝给strS;
strcpy(strS, temp);
return TRUE;
}
具体原因,是因为VB传递给DLL,实际上是strS这个变量的地址,(因为前面用的是ByVal限定词)也就是说是strS的指针。而使用前先分配大小,实际上是初始化指针,否则,是空指针,不能使用。在DLL函数中,如果出现了变更指针地址的操作,比如OLE2A,指针的赋值,指针的清空等等,都会引起strS地址的变更。这样,strS的值当然不可能传回VB中。
在VB中调用FuncB后,取得的是字符串后面会有一些空字符。比如,你申请了260个字符空间,结果,返回的字符串是“hello“,只有5个字符。那剩下的字符空间,都是空字符。可以使用下面的语句,去掉后面的空字符,只保留”hello“
str = left(strS, InStr(strS, Chr(0)) - 1)
总之,在VB和DLL之间传递数据,要尽量小心,尽量用简单类型。传递字符串时,在最开始,最后使用传递的字符串。中间过程建议采用临时变量替代。
- 在VB和DLL间传递字符串
- 在VB和DLL间传递字符串
- vb.net 调用c++dll的 字符串传递问题
- 在两个dll或者dll和exe之间传递stl
- 在VB中调用C/C++语言编写的dll,数组参数的传递
- 在VB中调用C/C++语言编写的dll,数组参数的传递
- 在VB中调用C/C++语言编写的dll,数组参数的传递
- VB中如何在类模块和主程序间传递数组
- VB中如何传递指针给DLL
- 传递VB数组给DLL中的函数
- DLL、BPL与字符串传递
- vc和vb之间传递safearray时,vc中的char类型在vb中可能会出问题
- Delphi字符串 DLL传递字符串方式
- vb调用vc dll返回字符串类型
- 请赐教:用C++做一个DLL在VB中调用,要传递的是一个数组
- C# 调用Dll 传递字符串指针参数
- C# 调用Dll 传递字符串指针参数
- DLL传递字符串数组输出参数
- mssql server 2000 触发器研究
- ASP、JSP、PHP三种技术比较
- 简单的验证码程序
- 又开始上班了
- Tomcat5调用Weblogic8.1布署的EJB
- 在VB和DLL间传递字符串
- 如何让局域网内的一台机器作web服务器
- 整合Spring与Struts的几种方法
- Frame 内置网页的简单方法
- 对学习J2EE有感
- [NET]MasterPage嵌套及MasterPage中的控件和变量的访问
- 毕业进入社会的我们终于变了
- 怎么清除IE浏览器中表单的自动提示?
- 隐藏在XP中的一个秘密武器,完全清除垃圾文件