从IBM Notes 9调用COM组件方法失败

时间:2013-09-10 12:10:46

标签: com activex lotus-notes lotus-domino lotusscript

调用在sysWOW64中注册的32位COM组件方法失败并显示错误消息:

  

“方法OleVarToLsVal中的类型不匹配,未知发现,未知   预期“

它的win7 64位,但Notes客户端默认安装为32位应用程序。代码如下:

dim c as Variant
dim n as Variant

set c = createobject("MSWC.counters")
n = c.Get("xx")

调试调用时,使用“isObject(c)”设置和测试对象,(尽管您无法在LotusScript调试中详细检查每个方法/属性)。

该方法应该返回一个原语long。我已经尝试设置n那么长,按住值,输入值,参数,strconv参数,使用变量作为参数,都无济于事。

WScript VBS主机运行的完全相同的代码(在syswow64中)按预期运行代码。

所以,有人知道吗:

  1. 如果Notes 9 COM值编组适用于任何组件?
  2. Notes 9 COM是否设置为识别'wow64'备用32位注册表
  3. 在我可以检查的注册表中是否有某些COM相关的编组设置(如果是的话/它们在哪里)?
  4. 是否有一些设置告诉Notes使用32位组件(如IIS 32位兼容性选项)
  5. 在主操作系统中我需要做什么或可以做什么来'重定向或配置'COM
  6. 或者说Notes再次被打破,没人关心?
  7. 感谢任何帮助 - 谢谢。

2 个答案:

答案 0 :(得分:0)

解决这个问题的最简单且最有效的方法是与IBM合作开设PMR。他们应该能够很快回答这个问题。

答案 1 :(得分:0)

好吧,7 年过去了(而且已经严重过时了!)只是为寻找答案的任何人提供的更新......需要一些 Notes 设置,并不是所有的 COM/Active-X 组件或数据类型都受 LotusScript 支持,因此即使 Notes 设置正确,您仍然可能无法访问/使用任何特定组件或组件中的某些方法。

必须允许用户在服务器文档安全部分的“签署或运行不受限制的方法和操作:”中运行不受限制的代理/代码。

Notes 客户端执行控制列表 ('ECL') 必须默认允许访问“外部程序”或代码签名者。如果未授予外部访问权限,ECL 警告框将要求用户继续。

如果您尝试执行不受支持的方法或不受支持的数据类型,则 LotusScript 或 COM/Active-X 错误报告将发出更多错误。 “CreateObject”的 Notes 开发人员帮助文件提供了有关不受支持的数据类型的更多详细信息:

LotusScript 不支持通过名称而不是通过它们出现的顺序来识别 OLE 方法或属性的参数,LotusScript 也不支持单独使用 OLE 名称(没有显式属性)来识别默认属性. OLE 方法的参数和通过引用传递的布尔、字节和日期类型的属性的结果未指定。 LotusScript 不支持这些数据类型。

依赖“默认属性”访问默认方法是一个常见的错误,需要您格外注意组件细节。很容易假设该组件不起作用,但实际上您只是没有正确使用它。

测试此问题的一种方法是尝试打开所有 Windows 计算机(可能是其他计算机?)上可用的公共对象,可能是“FileSystemObject”(FSO) 或 VbScript“regExp”组件。如果这些有效,您可以在此基础上再接再厉。为您的客户端安装获取正确的 32/64 位注册是测试/获得正确的另一个要素。

对于我的问题,我怀疑我使用了不受支持的方法或数据类型,并且偶尔在 Notes 中使用了 COM/Active-X,总体来说一切正常。