向导填加的接口总是下面这样 [ uuid(430AC33C-1D90-40E5-820D-8216C96CFF45),
helpstring("test2 Control 的调度接口")]
dispinterface _Dtest2
{
properties:
methods: [id(DISPID_ABOUTBOX)] void AboutBox();
[id(1), helpstring("方法GetText")] BSTR GetText(LONG Index);
};
helpstring("test2 Control 的调度接口")]
dispinterface _Dtest2
{
properties:
methods: [id(DISPID_ABOUTBOX)] void AboutBox();
[id(1), helpstring("方法GetText")] BSTR GetText(LONG Index);
};
向导可不处理这事的.
[out]这个是传出的参数,是一个指针类型的
[retval]这个只能用在返回值上,且只能出现一次,"好像必须是放在参数最后一个"(这个情况记得不是很清楚,具体是不是要最后一个,楼主自己试试).
[id(1), helpstring("方法GetSheetName")] HRESULT GetSheetName([in]SHORT Sheet, [out]BSTR* SheetName);.h修改为
HRESULT GetSheetName(SHORT Sheet, BSTR* SheetName);.cpp修改为
HRESULT Ctest1Ctrl::GetSheetName(SHORT Sheet, BSTR* SheetName)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()); // TODO: 在此添加调度处理程序代码 CString s;
s.Format("这是第%d个sheet!", Sheet);
*SheetName = s.AllocSysString();
return S_OK;
}在vb对象浏览器中,这个方法显示为:
Sub GetSheetName(Sheet As Integer, SheetName As String)
在vb中进行以下调用成功Private Sub Command1_Click()
Dim s As String
Call Me.test11.GetSheetName(10, s)
MsgBox s
End Sub在vbscript脚本中进行如下调用:
<script language = "vbscript">
sub Test()
dim s
set s = "" ‘不管是否加这句,都是报错“缺少对象”
obj.GetSheetName 10, s
MsgBox s
end sub
</script>----------------------------------------------------------
我本身的问题是:
我有mfc写了一个Activex控件,有几个方法通过参数向调用者传递控件的状态,我想一个方法就传递几个参数(如果传递一个的话,用返回值很容易实现),我发现这些有多个参数向调用者传递参数大方法在高级语言变成环境中(vb,delphi)工作正常,在脚本语言中就出现了这个错误。谁做个这个方面的东西,希望不吝赐教!!!
[id(1), helpstring("方法GetSheetName")] HRESULT GetSheetName([in]SHORT Sheet, [out, retval]BSTR* SheetName);s = obj.GetSheetName 10
dispinterface接口不需要写[in][out]之类的,这个是专门为脚本使用的接口,可以直接定义返回值。