最近在尝试MSProject2003的Addin编程,使用与Office系列同样的方法,使用visual studio.net2003创建好Shared Addin工程,并选择为支持Microsoft Project,
工程建好之后在Stdafx.h中import "MSPRJ.OLB" raw_interfaces_only named_guids, rename_namespace("MSProject").
在OnConnection函数中,定义了CComQIPtr<MSProject::_MSProject> spProject;来接收Microsoft project的实例对象.spProject获取没啥问题,但无法使用到MSProject::_MSProject上的接口函数,也无法从spProject上获取其他的接口.
有人知道什么原因吗?谢谢

解决方案 »

  1.   

    STDMETHODIMP CConnect::OnConnection(IDispatch *pApplication,......)
    {
      /**/
      CComQIPtr<MSProject::_MSProject> spPrjApp(pApplication); /*从OleView.exe中可以看到该接口有很多方法和属性,但我用spPrjApp->却看不到那些函数和属性(除了IDispactch的几个).*/
      CComQIPtr<MSProject::_Global> spGlobal;
      spPrjApp->QueryInterface(MSProject::DIID_Global, (LPVOID*)&spGlobal); /*可以得到_Global指针但也看不到其函数*/
      CComQIPtr<MSProject::Windows> spWindows;
      spPrjApp->QueryInterface(MSProject::DIID_Windows, (LPVOID*)&spWindows);/*spWindows一直为NULL*/}补充一下: 1.在Stdafx.h中
    #import "...\\MSPRJ.OLB" raw_interfaces_only named_guids, rename_namespace("MSProject")
    using namespace MSProject;
    #import "...\\MSO.OLB" raw_interfaces_only named_guids, rename_namespace("Office")
    using namespace Office;在Connect.h中
    #include "msprj.tlh"
    #include "mso.tlh"
      

  2.   

    在Connect.h中 
    #include "msprj.tlh" 
    #include "mso.tlh" 
    =======================
    这个不用加的。看不到属性和方法是什么意思?你打开tlh文件看看封装类的定义就知道了。
      

  3.   

    嗯,不好意思.
    msprj.tlh文件里面的MSProject::_MSProject和MSProject::_Global这两个个结构定义里面是空的,但是msprj.tli文件中是有MSProject::_MSProject成员函数的inline函数体的,为什么呢?
    用OleView.exe是可以看到该接口下面是有东西的.
      

  4.   

    我用的是ATL工程,没支持MFC,好像没的用类向导导入类型库,只有MFC Class From TypeLib
      

  5.   

    导入Excel.exe得到的excel.tlh中有下面内容(msprj.tlh中却没有下面类似的内容):
    ....
    _COM_SMARTPTR_TYPEDEF(_Application, __uuidof(_Application));
    ....
    struct __declspec(uuid("000208d5-0000-0000-c000-000000000046"))
    _Application : IDispatch
    {
        //
        // Raw methods provided by interface
        //      virtual HRESULT __stdcall get_Application (
            /*[out,retval]*/ struct _Application * * RHS ) = 0;
          virtual HRESULT __stdcall get_Creator (
            /*[out,retval]*/ enum XlCreator * RHS ) = 0;
          .....................................................
    }
    另外对与excel.tlh与msprj.tlh所共有的_Global是如下的情况:
    excel.tlh有内容:
    struct __declspec(uuid("000208d9-0000-0000-c000-000000000046"))
    _Global : IDispatch
    {
        //
        // Raw methods provided by interface
        //
          virtual HRESULT __stdcall get_Application (
            /*[out,retval]*/ struct _Application * * RHS ) = 0;
          virtual HRESULT __stdcall get_Creator (
            /*[out,retval]*/ enum XlCreator * RHS ) = 0;
          virtual HRESULT __stdcall get_Parent (
            /*[out,retval]*/ struct _Application * * RHS ) = 0;
          .....
    }
    msprj.tlh中是空的:
    struct __declspec(uuid("78e9f620-ebc0-11cf-a523-00a0c904de55"))
    _Global : IDispatch
    {};struct __declspec(uuid("00020aff-0000-0000-c000-000000000046"))
    _MSProject : IDispatch
    {};