【发布时间】:2015-11-23 21:33:11
【问题描述】:
我有一个旧版 Delphi 2 应用程序,我需要将它从通过 OLE 自动化与 Notes 通信转换为通过 COM 早期绑定进行通信。我使用的是 Delphi 7,因为代码库很大,并且我想避免在最新版本的 Delphi 中处理 Unicode 支持的工作。
基本工作正常:程序打开数据库,然后打开视图并使用 NotesView.GetDocumentByKey 方法搜索特定文档。当第一个参数是转换为 OleVariant 的单个字符串时,GetDocumentByKey 调用起作用,如下所示(打开 DB 和视图未显示)。
var
Key: OleVariant;
const ExactMatch: WordBool = True;
begin
Key := 'AKeyValue';
Doc := View.GetDocumentByKey(Key, ExactMatch);
bad variable type error发生在第一个参数是一个variant数组时,需要基于多列搜索视图时,如下图所示。
var
TwoKeysV: OleVariant;
const ExactMatch: WordBool = True;
begin
TwoKeysV := VarArrayCreate([0, 1], varOleStr);
TwoKeysV[0]:= WideString('Key1');
TwoKeysV[1]:= WideString('Key2');
Doc := View.GetDocumentByKey(TwoKeysV, ExactMatch);
我在两个键赋值语句上尝试了几种变体,但均未成功。例如,仅分配没有强制转换的键字符串仍然会产生错误的变量类型,并且使用 StringToOleString 函数会被编译器作为无效分配(PWideChar 到 Variant)拒绝。
【问题讨论】:
-
在字符串的帮助数组中是您需要发送的内容,您是否尝试在 Delphi 中创建一个真正的字符串数组并将其转换为 OleVariant ? (www-01.ibm.com/support/knowledgecenter/SSVRGU_9.0.1/…) 注意这不是Help所指出的:如果这个方法在COM下使用,带有数组的keyArray参数,它必须定义为Variant类型的数组。
-
尝试了创建键数组的想法是一个普通的 Variant 然后转换为 OleVariant 但它会产生相同的错误变量类型错误
标签: delphi com lotus-notes lotus-domino