我正在尝试使用 Word 文档中的一些嵌入对象。之前的一张海报告诉我,这并不简单。以下是链接答案的摘录:
“正如我之前提到的,利用
嵌入对象的编程模型
执行保存是一种
捷径。还有一个比较涉及的
适用于任何
嵌入对象。为了
要嵌入到第一个对象中
地方,它必须支持 COM 之一
IPersist 接口(即
IPersistStorage、IPersistStreamInit、
IPersistFile 等)。因此,一个
嵌入对象总是可以
通过调用提取
Marshal.QueryInterface 上
OLEFormat.Object(确定
适当的持久化接口),
相应地进行投射,然后调用
适当的方法。根据
您使用哪个持久化接口,
您可能需要额外拨打一些电话
方法来暴露适当的
存储在文件顶部。还,
取决于嵌入的类型
对象,您可能仍然需要激活
在能够之前的对象
成功查询接口
持久化接口。”
所以我有兴趣公开该对象正在实现哪个接口。我能找到的最接近的是here http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.interop/2007-07/msg00054.html。到目前为止的代码如下,非常感谢对 Marshal.QueryInterface 的任何帮助。
// Opening the word document
object missing = Type.Missing;
this.document = wordApp.Documents.Open(
ref fn, ref confirmConversions, ref readOnly, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing);
foreach (Microsoft.Office.Interop.Word.InlineShape inlineShape in this.document.InlineShapes)
{
if (inlineShape.OLEFormat.ProgID != null)
{
switch (inlineShape.OLEFormat.ProgID)
{
// This is a pdf file
case "AcroExch.Document.7":
//Marshal.QueryInterface(IntPtr pUnk, ref Guid iid, out IntPtr ppv);
break;
default:
break;
}
}
}