zoukankan      html  css  js  c++  java
  • 被CDOEXM折磨了一把

    下面是我原先用的调用CDOEXM中IMailboxStore接口给用户创建Mailbox的代码:

    DirectoryEntry deUser; // deUser为域中的用户
    String sHomeMDB; // sHomeMDB为域中Exchange Mailbox Store的路径

    CDOEXM.IMailboxStore mailboxStore = (IMailboxStore) deUser.NativeObject;
    mailboxStore.CreateMailbox(sHomeMDB);
    deUser.Update();

    运行到CreateMailbox()这个方法时,Exchange返回来一个“致命性故障”,上面的代码实在是标准得不能再标准的代码,Microsoft在KB中提供的代码示例都是这么几句,郁闷...难道是把DirectoryEntry对象的NativeObject本地对象映射转换成IMailboxStore有问题?

    于是,再隔上一层,先转成ADSI中的IADsUser:

    ActiveDs.IADsUser adsUser = (IADsUser) deUser.NativeObject;
    CDOEXM.IMailboxStore mailboxStore = (IMailboxStore) adsUser;
    mailboxStore.CreateMailbox(sHomeMDB);
    adsUser.SetInfo();

    还是“致命性故障”...于是,Google...终于检索到一个网页,那可怜的哥们和偶一样,也是“Catastrophic failure”,但是好像他比偶聪明那么一点点,他用VB.NET把代码写了一遍,就发现正常了...

    就像这样:

    Dim oMailboxStore As CDOEXM.IMailboxStore
    Dim oADsUser As ActiveDs.IADsUser

    oADsUser = GetObject(adsuserPath) ' 这里的adsuserPath就是用户的LDAP路径
    oMailboxStore = oADsUser

    oMailboxStore.CreateMailbox(homeMdb)
    oADsUser.SetInfo()

    偶再把这段代码在VB.NET里面生成了一个类库,然后在C#中引用、调用,It also works!

    但是实在不爽啊...于是盯上了VB.NET中的GetObject()这个函数,暗自想,如果偶在C#里面也调用这个函数...

    于是:

    IADsUser adsUser = (IADsUser) Microsoft.VisualBasic.Interaction.GetObject(deUser.Path, null);
    IMailboxStore mailboxStore = (IMailboxStore) adsUser;

    mailboxStore.CreateMailbox(sHomeMDB);
    adsUser.SetInfo();

    嘿嘿,果真好了!

    值得一提的是,VB.NET的类型Late Binding是C#所不具备的,虽然它的意义存在争议,但有些时候的确很有用。

  • 相关阅读:
    PHP 常用命令行
    windows环境下为php打开ssh2扩展
    mysql查看和修改注释
    PHP导出excel时数字变为科学计数的解决方法
    PHP获取上周、本周、上月、本月、本季度、上季度时间方法大全
    centos 基础修改文件权限
    使用apidocJs快速生成在线文档
    封装多线程处理大量数据操作
    android 中resources管理
    Android网格视图(GridView)
  • 原文地址:https://www.cnblogs.com/kaneboy/p/2436696.html
Copyright © 2011-2022 走看看