jos*_*hk0 5 c++ com activex visual-studio-2008
我正在学习如何编写可编写脚本的ActiveX控件.我的目标是有一个微小的控件,可以检查系统上是否安装了某些东西.到目前为止我所做的是:
但是,当我调用IsInstalled()时,我无法让它工作:
JScript调试器 - 打破JScript运行时错误 - (n http://img138.imageshack.us/img138/1586/whycomwhy.png
我不知所措.我也试过让IsInstalled成为一个属性而不是一个方法,在IDL中使用VARIANT_BOOL代替boolean而不是BOOL,你可以命名它.
这是相关的代码摘录.
标题:
afx_msg VARIANT_BOOL IsInstalled();
Run Code Online (Sandbox Code Playgroud)
实施:
afx_msg VARIANT_BOOL
CMyAXCtrl::IsInstalled()
{
return TRUE;
}
Run Code Online (Sandbox Code Playgroud)
发货地图:
BEGIN_DISPATCH_MAP(CMyAXCtrl, COleControl)
DISP_FUNCTION_ID(CMyAXCtrl, "IsInstalled", dispidIsInstalled, IsInstalled, VT_BOOL, VTS_NONE)
END_DISPATCH_MAP()
Run Code Online (Sandbox Code Playgroud)
IDL的发送部分:
[ uuid(6B662202-CF13-4144-AA33-C3FEE9C2C962),
helpstring("Dispatch interface for My Control")]
dispinterface _Daxplugin
{
properties:
methods:
[id(1)] VARIANT_BOOL IsInstalled();
};
Run Code Online (Sandbox Code Playgroud)
如果我应该提供任何其他相关的代码,请告诉我.但我很难过.先感谢您!
几乎可以肯定,您的可编写脚本函数的原型是错误的。脚本语言的 OLE 自动化往往依赖于返回 HRESULT,然后使用输出参数作为实际返回代码。
所以改成
[id(1)] HRESULT IsInstalled(VARIANT_BOOL* p);
另外 TRUE != VARIANT_TRUE,您必须返回 VARIANT_TRUE,它等于 -1 而不是 1。
希望其中一些确实有帮助,但如果没有实际的错误,我可能会弄错:)
归档时间: |
|
查看次数: |
1920 次 |
最近记录: |