C# 如何使用延迟绑定破坏IDL定义的SetPlaceholder文本

C# 如何使用延迟绑定破坏IDL定义的SetPlaceholder文本,c#,.net,com,ms-office,netoffice,C#,.net,Com,Ms Office,Netoffice,我想制作office插件,它将得到任何2007+办公室的支持。为不同的办公室设置不同的加载项版本似乎是不可能的,所有办公室都从同一注册表项加载加载项信息。所以我决定使用netoffice。 现在,当我使用ContentControl.SetPlaceholderText(null,null,“some text”)时,我得到DISP\u E\u TYPEMISMATCH异常。根据原因是写得不好的IDL定义:指针的整数默认值。有趣的是。 我试图传递缺少的.Value。 当我尝试使用自定义活页夹时

我想制作office插件,它将得到任何2007+办公室的支持。为不同的办公室设置不同的加载项版本似乎是不可能的,所有办公室都从同一注册表项加载加载项信息。所以我决定使用netoffice。

现在,当我使用
ContentControl.SetPlaceholderText(null,null,“some text”)
时,我得到
DISP\u E\u TYPEMISMATCH
异常。根据原因是写得不好的IDL定义:指针的整数默认值。有趣的是。
我试图传递
缺少的.Value

当我尝试使用自定义活页夹时

contentControl.InstanceType.InvokeMember("SetPlaceholderText",
            BindingFlags.InvokeMethod,
            new MyBinder(), 
            contentControl.UnderlyingObject,
            new object[] { null, null, placeholder });
MyBinder
方法从未被调用。
ContentControl
具有
占位符文本
属性,该属性具有
<代码>值是文档中的读/写属性,但在将值写入时表示为只读。


那么如何设置占位符呢?

Hmm,不,不可能是这样,因为您显式指定了null,所以您不依赖于[defaultvalue]。随机猜测:回顾。@HansPassant,我能够重现这个问题,正如我所见,quirk#4在这里不适用。关键是占位符仍然可以通过VBA设置:
control.SetPlaceHolderText,“我的占位符”
,但从C#看来这是不可能的。嗯,不,不可能,因为您明确指定了null,所以您不依赖[defaultvalue]。随机猜测:回顾。@HansPassant,我能够重现这个问题,正如我所见,quirk#4在这里不适用。关键是占位符仍然可以通过VBA设置:
control.SetPlaceHolderText,“我的占位符”
,但在C#中似乎不可能做到这一点。