【问题标题】:How to invoke COM function in Octave that takes input parameter?如何在 Octave 中调用带有输入参数的 COM 函数?
【发布时间】:2020-03-16 20:07:18
【问题描述】:

我使用安装了“windows”包的 Octave 5.1.0(来自 Octave Forge)。 我用它来访问一个windows应用程序的COM接口。

我可以使用以下命令查看 COM 函数:

h = actxserver('MyApp.Application')
com_invoke(h)

我可以访问不带任何参数的 COM 函数:

com_invoke(h, "GetStatus")

但是,对于带有一个参数的函数,我找不到正确的语法。 我在下面尝试了这些都无济于事:

com_invoke(h, "SetType", 1)
com_invoke(h, "SetType(1)")
com_invoke(h, "SetType", {1})
com_invoke(h, "SetType", ({1}))
com_invoke(h, "SetType[1]")
com_invoke(h, "SetType", [1])
com_invoke(h, "SetType", "1")

我一直在网上搜索,找不到任何信息。

调用接受输入参数的 COM 函数的正确方法是什么?

【问题讨论】:

  • 这个“windows”包(源代码在这里:sourceforge.net/p/octave/windows/ci/default/tree/src/__COM__.cc)似乎支持一组有限的 COM/Automation 类型。因此,它可能无法正常工作,具体取决于您的“MyApp.Application”COM 对象。
  • @SimonMourier 感谢西蒙。它只是一个带有 1 个参数的函数,我想它很常见并且经常需要。反正我当时好像不能用了。
  • 它与参数的数量无关,而更多地与它们的类型和/或方向(in/out/ref 等)有关。正如您可以查看源代码,octave_to_com 函数似乎仅支持 BSTR(字符串)BOOL(布尔)、R8(IEEE 双精度)、R8 数组、VARIANT 数组和 IDISPATCH(对象)。这并未涵盖您可以在 COM 对象中构建的所有内容。
  • @SimonMourier 哦,我明白了。谢谢。

标签: windows com octave ole forge


【解决方案1】:

我很抱歉。我发现我声明 COM 函数的方式不正确。修复后,现在可以正常使用了。

com_invoke(h, "SetType", 1)

问题是,我没有在 DISP_FUNCTION 中正确声明我的 COM 函数(输入参数)。

【讨论】:

    猜你喜欢
    • 2011-07-03
    • 2016-11-13
    • 2023-03-08
    • 2019-11-29
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多