手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>VB>列表

VB VC混合编程疑难问题解

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

//得到存储Student属性的成员变t的指针,赋给*pVal
return S_OK;
}
STDMETHODIMP CAX::put_Student (long newVal)
{
// TODD: Add your implementation code here
//将存储Student属性的成员变址的指针指向newVal所指的内存空间,
//然后通过内存拷贝方式拷贝此空间存放的Student的属性值
return S_OK;
}
   第二,正确编写VB向AX的Student属性动态赋值的代码。在VB中,先声明一个Person型变量,给该变量赋值后,获取该变量的内存地址并赋给Student属性即可。代码如下:
......
Dim StudentProp As Person
Dim StudentAddr As Long
StudentProp.Age=23
StudentProp.Heigth=1.78
'得到StudentProp变量的内存地址(方法从略),赋给StudentAddr
AX1.Student= StudentAddr
......
   借助指针完成自定义类型参数向ActiveX控件的传递所依据的是以下事实:不论控件是.dll还是.ocx,它都是与其客户同在一个进程内的服务器。所以,只要AX被编译成.dll或.ocx,指针的传递就是安全可靠的。

  四、中英文混合型字符串输出长度的确定

  中英文混合型字符串输出长度的确定问题在VB编程中经常遇到,而且可以通过VB, VC 混合编程有效解决,所以在此一并给出。

  VB编程中,经常需要得到某个字符串在实际输出时所需要的长度。这时,我们通常会考虑Len()和LenB()这两个函数。

  我们知道,Len()返回的是字符串中字符的个数,对于不含中文字符的字符串,其返回值通常就等于该字符串的输出长度;LenB()返回的则是按照双字节字符集(DBCS)计算出的字符串所占用的字节数,对于纯中文字符组成的字符串,其返回值通常也等于该字符串的输出长度。但是,当字符串中既有中文又有英文(这里将数字等视为英文)字符时,二者的返回值都不等于该字符串的输出长度。比如:“A中国人”这个字符串,用Len()函数时将返回4;LenB()则返回8;而实际输出时(比如向某记录文件输出该字符串),它将占用7个印刷符(每个英文字符占1个,每个中文字符占2个)。

  为了计算中英文混合型字符串的输出长度,我们可以用VC 编写一个完成此计算的DLL库函数,在VB中直接调用该函数即可。该VC 函数和VB中的调用代码如下:

  1) VC 6.0中的DLL函数
long APIENTRY Sizeof_vbString(char* at)
{
return (long)(::atrlen(st));
//::atrlen()返回int值,但在32位操作系统下,
//VC 中的int类型与VB中Long类型的范围是相当的
}
   2) VB 6.0中对Sizeof_vbString()的声明和调用
......
Declare Function Sizeof_vbString Lib "C:\DLLTest.dll"_
(By Val st As String) As Long
......
......
Dim stLen&
stLen=Sizeof_vbString ("A中国人")
stLen=7
......
   应该指出:上述方法同样可以计算纯英文或纯中文字符串的输入长度。

上一篇: Visual Basic 的常见问题
下一篇: 解析VB的事件驱动编程

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!