首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

ActiveX的属性用VB可以调用成功,VC调用出错?解决方案

2012-02-22 
ActiveX的属性用VB可以调用成功,VC调用出错?有一个第三方的ActiveX控件,有一个属性返回一个BSTR类型的字符

ActiveX的属性用VB可以调用成功,VC调用出错?
有一个第三方的ActiveX控件,有一个属性返回一个   BSTR   类型的字符串,使用VB调用它的时候,完全正常,返回的字符串是ANSI的字符串。在VC里调用它的时候,有些字符竟然显示成了 '? '号,比如:本来应该是   "g123458   b2321 "   的,得到的结果却是   "?23458   ?321 "。

奇哉怪哉!从现象上看像是UNICODE相关的错误,然而不管是不是定义了   _UNICODE   符号,都仍然返回问号。而且,VB能得到正常返回值的,VC没理由不行。实在不明白错在哪里。头发都急白了…

属性在IDL里的声明如下:
        [id(0x0000001b),   propget]
        BSTR   rCode();

在VC里自动生成的封装为:
        CString   GetRCode();

对调用的封装实现为:
        CString   CPpocx::GetRCode()
      {
                CString   result;
                InvokeHelper(0x1b,   DISPATCH_PROPERTYGET,   VT_BSTR,   (void*)&result,   NULL);
                return   result;
        }

经跟踪,执行了InvokeHelper后,result的值就带了问号的,已经不正常了。


哪位大虾遇到过类似的问题?恳请留下指导意见,不胜感激!

给不了太多分,如果经过指导得以解决,另开贴赠分,先谢谢了!


[解决办法]
要求的参数类型是BSTR*? 你为何传入CString*?
[解决办法]
改成CComBSTR a;或者_bstr_t a;
InvokeHelper(0x1b, DISPATCH_PROPERTYGET, VT_BSTR, &a, NULL);
CString res;
res=(CString)a;
试试看
[解决办法]
变通办法:拿VB编写个控件封装一下此控件,然后vc调用vb的控件
我原来有个vc编的控件,pb死活调用不对,,调用vb的就没问题,后来这样干的。
[解决办法]
怀疑有里头有日文这样的unicode字符。建议把返回字符串存到字节数组,然后一个字节一个字节判断它是否是双字节字符的前导字符(IsDBCSLeadByte可以判断),是的话,两个字节为一个字符
[解决办法]
你试试DentistryDoctor(Data Recovery -- http://www.powerdatarecovery.com)的方法
我觉得问题就出在这里
[解决办法]
Private Sub Form_Load()

vgctrl1.Design " "

End Sub

这句程序执行后,将在控件中设计一个新的Visual Graph视图文件
放一个按钮Command1,双击这个按钮,编写下面的代码

Private Sub Command1_Click()

Dim ASheet As ISheet
Dim AText As IText
Set ASheet = vgctrl1.ActiveSheet
Set AText = ASheet.AddUnit( "Text ", 0, 0, 100, 100)
AText.Text = "Hello World! "

End Sub

再放一个按钮Command2,双击这个按钮,编写下面的代码

Private Sub Command2_Click()

vgctrl1.NewUnit "Line ", 0

End Sub

右键事件。

Private Sub vgctrl1_OnRButtonDown(ByVal X As Double, ByVal Y As Double)

Dim ASheet As ISheet
Dim AUnit As IUnit
Set ASheet = vgctrl1.ActiveSheet
Set AUnit = ASheet.UnitAtPoint(X, Y, Nothing)
MsgBox "您在图形: " + AUnit.Name + " 上按下了右键! "

End Sub

这里好像有个漏洞:::单击Command1按钮创建一个图形,那么这里的AUnit就是空,将使得最后一行程序出错!!我这个也是以前遇到这个问题 去http://www.visual-graph.com上查来的
写出来 请高手看看

热点排行