最近在尝试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上获取其他的接口.
有人知道什么原因吗?谢谢
工程建好之后在Stdafx.h中import "MSPRJ.OLB" raw_interfaces_only named_guids, rename_namespace("MSProject").
在OnConnection函数中,定义了CComQIPtr<MSProject::_MSProject> spProject;来接收Microsoft project的实例对象.spProject获取没啥问题,但无法使用到MSProject::_MSProject上的接口函数,也无法从spProject上获取其他的接口.
有人知道什么原因吗?谢谢
{
/**/
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"
#include "msprj.tlh"
#include "mso.tlh"
=======================
这个不用加的。看不到属性和方法是什么意思?你打开tlh文件看看封装类的定义就知道了。
msprj.tlh文件里面的MSProject::_MSProject和MSProject::_Global这两个个结构定义里面是空的,但是msprj.tli文件中是有MSProject::_MSProject成员函数的inline函数体的,为什么呢?
用OleView.exe是可以看到该接口下面是有东西的.
....
_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
{};