是这样的:
目前有一个项目,需要做P3-MIS接口,所谓P3就是Primavera Project Planner这个工程进度管理软件。
项目要求是在MIS中调用P3的某些功能,在网页中显示项目某些信息以及对项目实现一些基本操作。我对Web ActiveX什么的一窍不通,拿着P3中自带的一个VC例子不知道如何是好。该例子中只提供了一个P3Engine.h/.cpp文件,定义了几个对P3项目数据库的操作(这个P3版本采用本地Btrieve数据库,Ra连接,这个所谓的Ra连接我也不明白....)。
例子是基于一个对话框的程序,在安装了P3的机器上可以运行,但只示例了调用几个函数比如Login等,部分代码如下:
void CSampleDlg::OnOK() 
{
 BOOL bRet = FALSE;
 VARIANT vTmp;
 VariantInit(&vTmp);
 vTmp.vt = VT_I2;
 vTmp.iVal = 1;
 VariantChangeType(&vTmp, &vTmp, 0, VT_BOOL);
 UpdateData(TRUE);
 TRY {
      //此处的m_P3Session是p3Engine.h文件中定义的一个CP3Session类的变量
      //而Login函数在p3Engine.cpp中则为注解1中的内容 bRet = m_P3Session.Login( m_sUsername, m_sPassword, vTmp);
      }
 CATCH ( COleDispatchException, e){
 m_P3Sess.ReleaseDispatch();
 MessageBox(e->m_strDescription, "Failed Login", MB_ICONEXCLAMATION);
 bRet = FALSE;
        }                       
 END_CATCH 
  
注解1:
//-----------------------------------------------
//BOOL P3Session::Login(LPCTSTR strUserName, LPCTSTR strPassWord, const VARIANT& vSerial)
// {
//   BOOL result;
//   static BYTE parms[] =
//   VTS_BSTR VTS_BSTR VTS_VARIANT;
//   //请看注解2
//   InvokeHelper(0x5, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms,
//                strUserName, strPassWord, &vSerial);
//    return result;
//  }
//--------------------------------------------------注解2:InvokeHelper函数是ActiveX调用吗?如果是的话,那是P3程序安装时注册了一个ocx控件吗?因为我看到这个例子中有一个Sample.odl文件,内容如下:
--------------------------------------------------------
[ uuid(49239EC1-07C4-11D0-AE5E-00AA00BB718D), version(1.0) ]
library Sample
{
importlib("stdole32.tlb");

//{{AFX_APPEND_ODL}}
};
-------------------------------------------------------------
这个Sample.odl是如何加入工程的?加入就可以使程序调用该ocx了吗?加入后如何调用?(不好意思,我实在对ActiveX/COM一窍不通)还有,我如果新建一个ActiveX工程,把P3Engine.h/.cpp文件加入工程,然后再加入Sample.odl,应该怎么样安排程序的结构才能使这个ocx能正常使用呢?
如果大侠们实在没有回答我的问题的欲望...请麻烦帮个忙,找几篇使用到了外部类的ActiveX教程给我,我找来找去,找不找这类教程啊!
感兴趣的也可以留下邮件,我将例子发去研究一下。
(不要求大家帮我代做)
谢谢!