0

调用 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 调试中详细检查每个方法/属性)。

该方法应该返回一个原始长。我尝试将 n 设置为 long,clng-ing 值,cstr-ing 值,参数,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 又坏了,没人在乎?

任何帮助表示赞赏 - 谢谢。

4

2 回答 2

0

解决此问题的最简单且可能最有效的方法是与 IBM 建立 PMR。他们应该能够很快回答这个问题。

于 2013-09-10T19:09:03.307 回答
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,但总的来说一切正常。

于 2021-04-08T23:47:23.347 回答