请教如何定义我的变量类型才能正确调用office TLB中的过程?愁死我了。(200分)

  • 主题发起人 主题发起人 心随风
  • 开始时间 开始时间

心随风

Unregistered / Unconfirmed
GUEST, unregistred user!
各位好!
我是一个业余编程爱好者,并且是delphi的初学者。 我在用delphi7.0进行MS Office的COM ADDIN 制作时遇到了一个问题,当我编译时下面的这个语句出现了错误
ActiveDocument.Protect(wdAllowOnlyFormFields,True,mPassWord);
编译错误的显示如下:
Error] WordAddIn_IMPL.pas(279): Types of actual and formal var parameters must be identical
我把mPassWord定义为string变量,但是Office库中,Protect过程的定义如下:
procedure Protect(Type_: WdProtectionType; var NoReset: OleVariant; var Password: OleVariant); safecall;

请问我如何正确定义变量?
 
用变体类型
var
v: Variant;
begin
v:=CreateOleObject('word.application');
v.visible:=True;
...
v.ActiveDocument.Protect(...);
end;
 
谢谢楼上的pihome,但我其实并不是利用ole来控制WORD,而是做的相当于一个插件,在WORD的菜单上添加一个按钮,当点击按钮时进行一定的操作,在操作中包括上面提到的调用protect过程,但变量类型的设置我搞不好。
 
其实我的问题的核心就是string变量如何转换成OleVariant的问题,还请高手出着。
 
>> string变量如何转换成OleVariant
var
v: Variant;
Str: String;
begin
v:='1234567';
Str:=v;
end;
 
心随风,你好,你看函数定义如下:
procedure Protect(Type_: WdProtectionType; var NoReset: OleVariant; var Password: OleVariant); safecall;
那就意味着NoReset是一个var类型的变量,也就意味着它必须传给它一个可读写的且类型完全一致的变量才可以.所以你应该这样写:
var
vNoReset,vPassword : olevariant;
begin
...;
vNoReset := True;
vPassword := 'yourpassword';
..
然后再调吧,包你OK!




end;

 
谢谢LDeng。问题已按你的方法解决。非常感谢。
 
后退
顶部