WScript.CreateObject 在调用 C++ COM dll 函数时返回空
WScript.CreateObject returns empty when calling a C++ COM dll function
我有一个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 脚本中不起作用。
感谢任何帮助,以找到此VB脚本代码不回显任何内容的原因。
你可以做的是从这里更改 IDL 签名
[id(2)] HRESULT Add([in] int Value1, int Value2, [out] int *ReturnValue);
对此
[id(2)] HRESULT Add([in] int Value1, int Value2, [out, retval] int *ReturnValue);
这在这里很有意义,因为它在语义上是一个返回值。有关此内容的信息,请参阅 retval 属性文档。
然后你可以在 VBScript 中这样调用它:
ret = Add(1, 2)
否则,请查看此内容以获取有关 VBScript 中的 byref 的更多信息:VBScript 中的 ByRef 和 ByVal
相关文章:
- 从函数返回const char*数组
- 检查函数返回类型是否与STL容器类型值相同
- 从 c 或 cpp 系列子函数返回到主函数
- 从函数返回任意简单类型的数据
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 从 C++ 中的函数返回数组地址问题
- VirtDisk.h QueryChangesVirtualDisk() 函数返回 RangeCount 为 0
- 为什么glGetSubroutineIndex为不同的函数返回相同的值?
- 在 c++ 中将函数返回类型指定为模板参数
- 从封装在对象中的函数 C++ 返回时为空的列表
- 为什么向量内部的指针在从函数返回时会发生变化?
- 函数返回的 rvalue 引用(表达式)是 xvalue - 但没有标识?
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- 寿命延长从函数返回引用
- 程序不向函数返回值
- 字符串函数返回奇怪的值
- 类的大问题,以及从空函数c++返回
- 为什么在尝试测量函数返回所需的时间时,我的运行时编号是错误的?
- C++二叉搜索树模板从函数返回节点
- NVCC 错误:string_view.h:constexpr 函数返回是非常量