TA的每日心情![](source/plugin/dsu_paulsign/img/emot/kx.gif) | 开心 昨天 15:23 |
---|
签到天数: 69 天 [LV.6]常住居民II
管理员
- 积分
- 2704
|
#pragma once
#ifdef _ACAD2004
#include // AutoCAD2004 et supérieurs
#else
#include // AutoCAD2002
#endif
#define ERR_NOERROR 0
#define ERR_CLSIDFROMPRGID -1
#define ERR_GETACTIVEOBJECT -2
#define ERR_UNK_QUERYINTERFACE -3
#define ERR_ACAD_QUERYINTERFACE -4
#define ERR_GETDOCUMENTS -5
#define ERR_OPENFILE -6
class CAcadDriver
{
public:
CAcadDriver(void);
~CAcadDriver(void);
private:
int Init(void);
IAcadApplication *pAcad;
IAcadDocuments *m_acaddocs;
public:
int OpenDoc(char *filename);
int CloseDoc(void);
public:
IAcadDocument *pdoc;
CString m_strCurrentFile;
};
// acaddriver.cpp
#include "StdAfx.h"
#include "acaddriver.h"
#include // ConvertStringToBSTR
// Acad 2007
extern const IID IID_IAcadApplication =
{0x8F17437C,0x2EFB,0x4FC4,{0x81,0x88,0xEE,0xFA,0x50,0xFE,0x71,0x47}};
CAcadDriver::CAcadDriver(void)
{
pAcad = NULL;
m_acaddocs = NULL;
m_strCurrentFile = "";
pdoc = NULL;
}
int CAcadDriver::Init(void)
{
HRESULT hr = ERR_NOERROR;
CLSID clsid;
LPUNKNOWN pUnk = NULL;
LPDISPATCH pAcadDisp = NULL;
CString m_strMessage;
hr = ::CLSIDFromProgID(L"AutoCAD.Application",&clsid);
if (FAILED(hr))
{
return(ERR_CLSIDFROMPRGID);
}
if(::GetActiveObject(clsid, NULL, &pUnk) != S_OK) // AutoCAD Actif ..
{
return(ERR_GETACTIVEOBJECT);
}
hr = pUnk->QueryInterface(IID_IDispatch, (LPVOID*) &pAcadDisp);
pUnk->Release();
if (FAILED(hr))
{
return(ERR_UNK_QUERYINTERFACE);
}
hr = pAcadDisp->QueryInterface(IID_IAcadApplication,(void**)&pAcad);
pAcadDisp->Release();
if (FAILED(hr))
{
return(ERR_ACAD_QUERYINTERFACE);
}
//pAcad->put_Visible(false);
hr = pAcad->get_Documents(&m_acaddocs);
if (FAILED(hr))
{
return(ERR_GETDOCUMENTS);
}
return(ERR_NOERROR);
}
CAcadDriver::~CAcadDriver(void)
{
if ( m_acaddocs != NULL )
{
m_acaddocs->Release();
m_acaddocs = NULL;
}
if ( pAcad != NULL )
{
pAcad->Release();
pAcad = NULL;
}
}
int CAcadDriver::OpenDoc( char *filename )
{
HRESULT hr = ERR_NOERROR;
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if( m_acaddocs == NULL )
{
int init = this->Init();
if( init != ERR_NOERROR )
return(init);
}
if( pdoc != NULL )
{
this->CloseDoc();
}
// convert to unicode
BSTR strFile = _com_util::ConvertStringToBSTR( filename );
#ifdef _ACAD2004 // AutoCAD2004 et supérieurs
hr = m_acaddocs->Open( strFile, covTrue, COleVariant(""), &pdoc);
#else
hr = m_acaddocs->Open( strFile, covTrue, &pdoc);
#endif
SysFreeString(strFile);
if (FAILED(hr))
{
return(ERR_OPENFILE);
}
IAcadDatabase *pDatabase;
pdoc->get_Database( &pDatabase );
return ERR_NOERROR;
}
int CAcadDriver::CloseDoc(void)
{
COleVariant
covTrue((short)TRUE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if( pdoc != NULL )
{
pdoc->Close(covFalse,covOptional);
pdoc->Release();
pdoc = NULL;
}
return 0;
} |
|