//得到存储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
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




