调用C ++ COM dll函数时,WScript.CreateObject返回空

时间:2017-07-12 11:48:17

标签: c++ string vbscript com

我有一个C ++ COM dll项目,当从VB脚本文件中的COM对象调用时,以下函数可以正常工作。

[id(1)] HRESULT ShowMessage([in] BSTR sMessage, BSTR sTitle); //<< .IDL File

STDMETHOD(ShowMessage)(BSTR sMessage, BSTR sTitle); //<< Header File

STDMETHODIMP CFoo::ShowMessage(BSTR sMessage, BSTR sTitle) //<< C++ Source File
{
    MessageBox(0, CString(sMessage), CString(sTitle), 0);
    return S_OK;
}

当我从VB脚本中调用它时,上面的函数工作正常:

Dim Test: Set Test = WScript.CreateObject("VbsEvents.dll")
Test.ShowMessage "Hello World!", "Windows Script Host"

但是,如果我声明如下功能:

[id(2)] HRESULT Add([in] int Value1, int Value2, [out] int *ReturnValue); //<< .IDL File

STDMETHOD(Add)(int Value1, int Value2, int *ReturnValue); //<< Header File

STDMETHODIMP CFoo::Add(int Value1, int Value2, int *ReturnValue) //<< C++ Source File
{
    *ReturnValue = Value1 + Value2;
    return S_OK;
}

并从VB脚本中调用它,如:

Dim Return: Test.Add 1, 2, CInt(Return)
WScript.Echo CStr(Return)

我一直没有得到任何回应,我希望这会回应3。我无法弄清楚为什么这个函数在VB Script中不起作用。

感谢任何帮助,以找出这个VB脚本代码没有回应的原因。

1 个答案:

答案 0 :(得分:1)

您可以做的是从此

更改IDL签名
ROUTER

到这个

[id(2)] HRESULT Add([in] int Value1, int Value2, [out] int *ReturnValue);

这在这里很有意义,因为在语义上是的返回值。有关此信息,请参阅retval attribute文档。

然后你可以在VBScript中这样调用它:

[id(2)] HRESULT Add([in] int Value1, int Value2, [out, retval] int *ReturnValue);

否则,请在VBScript:ByRef and ByVal in VBScript

中查看更多关于byref的内容