COM 组件调用 QueryInterface 失败原因?

蓝小修 2010-12-15 06:15:24
大家好,请教一个问题: C#调用Microsoft.Office.Outlook.MailItem;并且在程序中用MailItem类做了一些操作。编辑的时候,并且在自己的电脑上操作的时候,没有问题,可是一到其他电脑上就报以下错误,程序并且会自动关闭。

System.InvalidCastException:Unable to cast COM object of type 'System._ComObject' to interface type 'Microsoft.Office.Outlook.MailItem'. This operation failed because the QueryInterface call on the COM component for the interface IID '{00063034-0000-0000-C000-000000000046}'failed due to the following error: No such interface supported(Exception from HRESULT:0x60004002(E_NOINTERFACE)).
at JobsDB.EmailAnalyzerSystem.EmailAnalyzer.AnalyzeAll()
at JobsDB.EmailAnalyzerSystem.MailForm.StartAnalyze(Boolean blnUnsubsribe)

请高手们帮帮忙啊,很急的,先谢谢啦!!!
...全文
438 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝小修 2010-12-17
  • 打赏
  • 举报
回复
已经解决了,非常的感谢各位!!!
wuyq11 2010-12-15
  • 打赏
  • 举报
回复
类型
foreach ( MailItem oItem in theMailFolder.Items.OfType<MailItem>()) {

}
http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/24942568-6658-47d7-b01b-6b1a89ca6812
宝_爸 2010-12-15
  • 打赏
  • 举报
回复
如果有代码就容易分析了。

不过看错误应该是将其他类型的对象强制转换成MailItem了。因为在outlook中MAPIFromFolder可以放多种类型的Item.
这样当你使用下面代码时就会出错

For Each MItem In MAPIFromFolder.Items

要用类似下面的代码

for(int i = 0 ;i < oItems.Count ; i++)
{
MailItem omsg = oItems.Item(i) as MailItem
if (omsg != null)
{
}
}
以上代码没有经过编译,仅供参考

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧