我有一个使用Office互操作程序集的应用程序.我知道运行时管理的"运行时可调用包装器(RCW)".但我不太确定引用计数如何增加.MSDN说,
RCW只保留对包装的COM对象的一个引用,而不管调用它的受管客户端的数量.
如果我理解正确,在以下示例中,
using Microsoft.Office.Interop.Word;
static void Foo(Application wrd)
{
/* .... */
}
static void Main(string[] args)
{
var wrd = new Application();
Foo(wrd);
/* .... */
}
Run Code Online (Sandbox Code Playgroud)
我将实例传递wrd给另一个方法.但这不会增加内部引用计数.所以我想知道引用计数增加的场景是什么?任何人都可以指出引用计数增加的情况吗?
另外我读了一些博客,说在使用COM对象编程时避免使用双点.像,wrd.ActiveDocument.ActiveWindow.作者声称编译器创建单独的变量来保存将增加引用计数器的值.恕我直言,这是错误的,第一个例子证明了这一点.那是对的吗?
任何帮助都会很棒!
如只读确认,其他警报.这些弹出窗口怎么办?还是忽略它们?
我目前正在研究ac #project,我需要访问Outlook.开发工作是在两台不同的机器上完成的,其中一台机器安装了办公室,另一台则没有.我之前曾询问如何针对outlook com对象编译我的项目,其中一条评论建议我针对办公室主互操作程序集或PIA进行编译.在我下载的Office 2007 PIA中,有一个msi文件,应该为Office的不同部分安装许多PIA.我的问题是,这似乎不会发生.打字后,在我办公室的机器上
msiexec /i o2007pia.msi
Run Code Online (Sandbox Code Playgroud)
在提示符下,Windows安装程序启动,并显示一个消息框,显示"请等待Windows配置Microsoft Office 2007主互操作程序集.收集所需信息"以及大约33%的进度条,之后它将消失,之后
gacutil -l microsoft.office.interop.outlook
Run Code Online (Sandbox Code Playgroud)
Office 2007没有产生任何结果(我得到一个结果,版本为10.0.4504.0,是早期安装尝试与Office版本错误的结果.但Office 2007 PIA具有主要版本12.)
我看到了几个可能的解释,其中没有一个我真的相信:
GAC无法处理同一程序集的多个版本,因此不允许我安装较新版本.
不知怎的,我不满足要求.这些基本上都是XPsp2,以及.Net 1.1或更高版本,我都有.要求部分还提到,下载适用于Office 2007,我没有安装,但我不认为这是一个要求.这既是因为没有被指定为要求,而且因为Hans Passant对我原来的问题的评论非常肯定PIA可以专门用于没有安装Office的开发,所以没有任何意义办公室作为先决条件.
那么有没有人知道为什么Office 2007 PIA没有正确安装,或者我能做些什么来接近答案?如果您需要更多信息,请告诉我.谢谢.
我正在尝试将powerpoint演示文稿转换为单独的svg文件(每张幻灯片1个),是否可以通过使用Microsoft Office 2010 PIA来实现?
如果是这样,那么有没有关于在Java中使用Microsoft Office 2010 PIA的教程?
我已经成功完成了一个带有MS Word集成的Windows窗体应用程序 - 应用程序写入Word模板中的合并域.我使用MS Word 2007完成了模板,但是将其作为97-2003".dot"文件保存在兼容模式下.由于我安装了Office 2007,因此我使用的是MS Word对象库PIA的12.0版.如果我要部署此应用程序,使用Office XP或2003的其他人是否能够使用它,因此我询问兼容性?
我已将PIA DLL复制到应用程序的输出目录中.
您好,我一直在理解为MS Office部署主互操作程序集(PIA)的一些复杂性.我在VS 2008中使用纯com技术构建了Visual Studio Com Add-IN(不是VSTO,请参阅下面的内容以获取更多信息),它引用了2003主互操作程序集,但加载项可以在2003,2007或2010现在使用办公机器.因为我从来不知道客户是使用2003,2007还是2010,所以我不能简单地部署一个PIA版本作为先决条件(除非我做了3个我不想做的安装程序).现在,我的理解是,当你按照这里的步骤要将2003和2007 PIA添加到Visual Studio(2008)安装程序包中显示的先决条件列表,先决条件足够聪明,可以确定您要定位的客户端上运行的是哪个Office版本.因此,如果要选择2003主互操作程序集和2007主要iterop程序集作为先决条件,那么当它安装在具有2003的计算机上时,它应该足够智能,只有在这台计算机上缺少这些PIA时才尝试添加2003 PIA.如果这是一台2007 Office机器,那么它只会安装2007 PIA(而不是尝试安装2003 PIA).
问题1是正确的理解(前提条件包是智能的,只能根据Office的版本安装它需要的东西吗?)
问题2是否有办法让2010 PIA显示在VS 2008的先决条件列表中,如2003和2007呢?我不想将此项目升级到VS 2010 b/c它现在被认为是一个遗留应用程序,来自世界各地的许多客户使用它.
问题3即使实际程序集引用了2003主要的interops,我现在也不会将这些interops与加载项一起部署到安装位置.相反,我假设如果我能安装正确的PIA,那么在安装路径中我不需要这个,因为PIA将在GAC中.但是,一种可能的方法可能只是在安装路径中包含引用的2003程序集(在我的例子中是excel和word),而不用担心PIA.我怀疑这可能适用于2003年的机器,但可能不会在2007年和2010年的机器上运行后者,即使在程序集的安装路径中运行时发现2003引用的interop,我想如果没有GAC中的Policy.11.0.Microsoft.Office.Interop.Excel/Word(等),然后2007年和2010年可能不知道如何处理11.0(2003)interops(因为我认为Policy.11.0.Microsoft.Office.Interop文件将2003 interops的请求重定向到2007或2010).有什么想法吗?
问题4: Framework 2.0应用程序Office加载项和Office 2003存在一个众所周知的错误,即加载项无法加载.KB907417又称KB908002解决了这个问题.如果您在3.0或3.5框架上开发(并使3.0或3.5成为先决条件),那么任何人都知道这个KB是否必要,因为这个问题特定于框架2.0?或者KB仍然需要部署b/c它的office 2003是问题而不是框架的版本?
正如您在3个问题中所说,我想确定的是我们是否可以通过VS设置实用程序构建一个单独的安装程序.如果PIA可以使用一个安装程序完成,但上面的KB是障碍(也许答案会回来,即使在3.0或3.5框架2003客户将需要KB),那么一个安装程序的路径可能只是制作KB是一个全面的先决条件,并将其安装在2007或2010机器上,尽管它们在技术上并不需要它们.关于该选项的任何想法也将受到赞赏.最后,我知道为excel或word编写一个manged Com Add-IN现在通常使用VSTO而不是纯托管框架代码完成,但是目前这不是将遗留应用程序更改为此方向的选项.另据报道4.
很抱歉问这么愚蠢的问题,但我用Google搜索了大约两个小时,但找不到我的问题的答案:
如何开发Outlook 2013加载项?
我有一个在C#2010和Outlook 2010中创建的加载项.现在我想以这种方式扩展它,在Outlook 2013中是两个浏览器事件InlineResponse和InlineResponseClose.
我搜索了VSTO和PIA的永不版本,但每个网站都告诉我这些仅适用于VS 2012?
有人可以解释一下我需要扩展这个加载项或向我展示一个描述这个的链接吗?对不起,如果这是一个愚蠢的问题,但在那之后我有点紧张.
任何人都知道如何安装MS Office主互操作程序集而无需安装办公室本身?
我正在使用 Office 主互操作程序集从我的 WPF 应用程序控制 PowerPoint。目前我在我的项目中使用 PIA v14,它可以与 Office 2010 和 Office 2013 一起使用,没有任何问题。但我还需要添加对 Office 2007 的支持(当我在装有 Office 2007 的计算机上测试我的应用程序时,它不起作用)。
所以,我的问题是:我是否应该将项目中引用的 PIA 更改为 v12(以支持 Office 2007/2010/2013),或者可以将 v12 和 v14(也可能是 v15)PIA 添加到项目中并动态加载正确的应用程序启动期间程序集的版本基于目标计算机上安装的 Office 版本?另外,如果我在所有 Office 版本 (2007/2010/2013) 上使用 PIA v12,是否存在一些兼容性风险?
office-pia ×9
ms-office ×6
c# ×5
.net ×2
com ×1
com-interop ×1
deployment ×1
gac ×1
powerpoint ×1
rcw ×1
svg ×1
vsto ×1
windows-xp ×1
winforms ×1
wpf ×1