You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

307 lines
8.6 KiB
C++

//#include "StdAfx.h"
#include "LaipuVbDllMgr.h"
//#include "LogMgr.h"
//#include "SinglechipCardMgr.h"
//#include "Mirror.h"
CLaipuVbDllMgr *gLaipuVbDllMgr = new CLaipuVbDllMgr;
bool CLaipuVbDllMgr::m_zIsInitOk = false;
CLaipuVbDllMgr::CLaipuVbDllMgr(void)
{
pMarkingScanCom = NULL;//<2F><><EFBFBD><EFBFBD>dll <20><><EFBFBD><EFBFBD>com <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
m_bIni = false;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>ʼ<EFBFBD><CABC>
}
CLaipuVbDllMgr::~CLaipuVbDllMgr(void)
{
}
void CLaipuVbDllMgr::Ini()
{
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>mark dll <20><>com <20><><EFBFBD><EFBFBD>------------------------------------------------------
HRESULT hresult;
CLSID cls_marking_scan_id;
//<2F><><EFBFBD>̳߳<DFB3>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CoInitialize(NULL);
//<2F><><EFBFBD>̳߳<DFB3>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//CoInitializeEx(NULL, COINIT_MULTITHREADED);
//<2F><><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>
hresult=CLSIDFromProgID(OLESTR("marking_scan.marking_scan_dll"), &cls_marking_scan_id);
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CLSID
//<2F><>ʼ<EFBFBD><CABC>CLSADO
/*<2A><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Com<6F><6D><EFBFBD><EFBFBD>
CoCreateInstance<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CLSID<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룩<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>128λ<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>Ψһ<EFBFBD>ر<EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>
<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪNULL<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>̻򱾵أ<EFBFBD><EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD>ΪCLSCTX_INPROC_SERVER<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>DLL<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>Žӿڵ<EFBFBD>ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>128λ<EFBFBD>ı<EFBFBD><EFBFBD>룻
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľӿ<EFBFBD>ָ<EFBFBD>롣*/
hresult=CoCreateInstance(cls_marking_scan_id,NULL,CLSCTX_INPROC_SERVER,__uuidof(_marking_scan_dll),(LPVOID *) &pMarkingScanCom);
if(FAILED(hresult))
{
LaserLogger::GetInstance()->WriteLog(0, "mark dll com is error");
}
else
{
m_bIni = true;
LaserLogger::GetInstance()->WriteLog(0, "mark dll com is ok");
}
}
//ͨ<><CDA8>vb dll <20><><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
void CLaipuVbDllMgr::VbIniCard(short low,short High)
{
if(!m_bIni)
{
Ini();
}
//gLogMgr->WriteDebugLog(_T("func : VbIniCard"));
////<2F><><EFBFBD><EFBFBD>SAFEARRAY
//const int size = 5;
//BYTE ComArr[size];//<2F>ѻ<EFBFBD><D1BB><EFBFBD>ʹ<EFBFBD>õĴ<C3B5><C4B4>ں<EFBFBD>
//for(int i=0;i<size;i++)
//{
// ComArr[i]=gSinglechipCardMgr->GetCardCom(i);
//}
//ת<><D7AA>ΪSAFEARRAY <20><><EFBFBD><EFBFBD>----------------------------------------------
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].cElements = 5;//<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
rgsabound[0].lLbound = 0;
psa = SafeArrayCreate(VT_UI1,1,rgsabound);//VT_UI1 <20><>ʾBYTE <20><><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD>SAFEARRAY
/*for (long index = 0; index < 5; index++)
{
if (FAILED(SafeArrayPutElement(psa, &index, &ComArr[index])))
{
return;
}
}*/
short card = 0;//<2F>ѻ<EFBFBD><D1BB><EFBFBD>1 , pci <20><>0
short LaserFlg = 0;//<2F>߿<EFBFBD><DFBF><EFBFBD><EFBFBD><EFBFBD>?
/*if(gMirror->IsLaserSwitch())
{
LaserFlg = 1;
}*/
short LaserType = _FIBER;
short MirrorIdx = 0;//<2F><>ʱֻ<CAB1><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
short ret = 0;
//low = 1L << 7;
//High = 1L << 7;
ret = pMarkingScanCom->Marking_init_pci(
&low,//<2F><>8λ<38><CEBB><EFBFBD><EFBFBD><EFBFBD>˿ڳ<CBBF>ʼֵ
&High,//<2F><>8λ<38><CEBB><EFBFBD><EFBFBD><EFBFBD>˿ڳ<CBBF>ʼֵ
&card,
&LaserType,
&MirrorIdx,//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ò<EFBFBD>ͬ<EFBFBD><CDAC>У׼<D0A3>ļ<EFBFBD>
&psa,
&LaserFlg
);
LaserLogger::GetInstance()->WriteLog(0, "Marking_init_pci is " + ret);
SafeArrayDestroy(psa);//<2F>ͷ<EFBFBD>SAFEARRAY <20>ռ<EFBFBD>
/*if (false == CLaipuVbDllMgr::m_zIsInitOk)
{
pMarkingScanCom->Marking_init_Z();
CLaipuVbDllMgr::m_zIsInitOk = true;
}*/
}
//<2F><>ȡvb com <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
_marking_scan_dll *CLaipuVbDllMgr::GetCom()
{
return pMarkingScanCom;
}
void CLaipuVbDllMgr::MarkingStart()
{
//gLogMgr->WriteDebugLog(_T("MarkingStart"));
pMarkingScanCom->marking_start();
}
void CLaipuVbDllMgr::MarkingStop()
{
//gLogMgr->WriteDebugLog(_T("MarkingStop"));
pMarkingScanCom->Marking_stop();
}
void CLaipuVbDllMgr::CallMarkingEnd(long fileno,long fileAll,long MarkM,long m_sel,long head,SAFEARRAY * psa)
{
//gLogMgr->WriteDebugLog(_T("CallMarkingEnd"));
//test
pMarkingScanCom->Marking_end(&fileno,&fileAll,&MarkM,&m_sel,&head,&psa);
}
#if 1
void CLaipuVbDllMgr::CallMarkingData(vector<vector<Dbxy2>> &vec)
{
SAFEARRAY *pSafeArr = CreatSafeArray(vec);
if(pSafeArr)
{
//TODO:<3A><><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>̶<EFBFBD>ֵ
pMarkingScanCom->Marking_data(&pSafeArr , 60);
SafeArrayDestroy(pSafeArr);//<2F>ͷ<EFBFBD>SAFEARRAY
}
}
void CLaipuVbDllMgr::CallMarkingDataInSemi(vector<vector<Dbxy2>> &vec)
{
int vecCnt = vec.size();
vector<double> NewVec;
NewVec.push_back(vecCnt);//<2F><><EFBFBD><EFBFBD>
for (auto const & LineVec : vec)
{
Dbxy2 FirstPt = LineVec[0];
double SumX = FirstPt.x;
double SumY = FirstPt.y;
int PtCnt = 1;
for (auto const & pt : LineVec)
{
if (pt == FirstPt)
continue;
PtCnt++;
SumX += pt.x;
SumY += pt.y;
}
NewVec.emplace_back(SumX / PtCnt);
NewVec.emplace_back(SumY / PtCnt);
}
NewVec.push_back(0);//<2F><><EFBFBD><EFBFBD>λ
SAFEARRAY *pSafeArr = CreatSafeArrayD(NewVec);
if (pSafeArr)
{
//gLogMgr->WriteDebugLog("Func : pMarkingScanCom->Marking_data");
//pMarkingScanCom->Marking_Points(&pSafeArr, gProgramCspMarkMgr->GetPulseHoldTime(), gProgramCspMarkMgr->GetFirstPulseDelay()); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//TODO:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD>޸<EFBFBD>
pMarkingScanCom->Marking_Points(&pSafeArr, 20/*m_pauseDelay*/,0/*m_pauseFirstDelay*/);
SafeArrayDestroy(pSafeArr);//<2F>ͷ<EFBFBD>SAFEARRAY
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>صĸ<D8B5><C4B8><EFBFBD>
int CLaipuVbDllMgr::CalElementsCnt(vector<vector<Dbxy2>> &vec)
{
int ret = 0;
vector<vector<Dbxy2>>::iterator iter = vec.begin();
vector<vector<Dbxy2>>::iterator iter_end = vec.end();
for(;iter!=iter_end;iter++)
{
ret++;//<2F><>ǰ<EFBFBD>߶εĵ<CEB5><C4B5>ĸ<EFBFBD><C4B8><EFBFBD>
ret += (*iter).size()*2;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
ret++;//<2F><><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>λ
return ret;
}
int CLaipuVbDllMgr::CalElementsCnt(vector<double> &vec)
{
int ret = vec.size()*3;
return ret;
}
//<2F><>װSAFEARRAY <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>Ҫ<EFBFBD>ڵ<EFBFBD><DAB5>ú<EFBFBD><C3BA>ͷ<EFBFBD><CDB7><EFBFBD>Դ)
SAFEARRAY * CLaipuVbDllMgr::CreatSafeArray(vector<vector<Dbxy2>> &vec)
{
//<2F><><EFBFBD><EFBFBD>SAFEARRAY
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].cElements = CalElementsCnt(vec);//<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
rgsabound[0].lLbound = 0;
psa = SafeArrayCreate(VT_R8,1,rgsabound);//VT_R8 <20><>ʾdouble <20><><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD>SAFEARRAY
long idx = 0;
vector<vector<Dbxy2>>::iterator iter = vec.begin();
vector<vector<Dbxy2>>::iterator iter_end = vec.end();
for(;iter!=iter_end;iter++)
{
int size = (*iter).size();
if(size==0)
continue;
double Cnt = (double)size;
if(FAILED(SafeArrayPutElement(psa,&idx,&Cnt)))//<2F><>ǰ<EFBFBD>߶εĵ<CEB5><C4B5><EFBFBD>
{
SafeArrayDestroy(psa);//<2F>ͷ<EFBFBD>SAFEARRAY
return NULL;
}
idx++;
vector<Dbxy2>::iterator iter1 = (*iter).begin();
vector<Dbxy2>::iterator iter1_end = (*iter).end();
for(;iter1!=iter1_end;iter1++)
{
if(FAILED(SafeArrayPutElement(psa,&idx,&(*iter1).x)))//<2F><><EFBFBD>ݵ<EFBFBD>X <20><><EFBFBD><EFBFBD>
{
SafeArrayDestroy(psa);//<2F>ͷ<EFBFBD>SAFEARRAY
return NULL;
}
idx++;
if(FAILED(SafeArrayPutElement(psa,&idx,&(*iter1).y)))//<2F><><EFBFBD>ݵ<EFBFBD>Y <20><><EFBFBD><EFBFBD>
{
SafeArrayDestroy(psa);//<2F>ͷ<EFBFBD>SAFEARRAY
return NULL;
}
idx++;
}
}
double zero = 0;
if(FAILED(SafeArrayPutElement(psa,&idx,&zero)))//<2F><><EFBFBD><EFBFBD>λ
{
SafeArrayDestroy(psa);//<2F>ͷ<EFBFBD>SAFEARRAY
return NULL;
}
return psa;
}
SAFEARRAY * CLaipuVbDllMgr::CreatSafeArray(vector<double> &vec)
{
//<2F><><EFBFBD><EFBFBD>SAFEARRAY
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].cElements = CalElementsCnt(vec);//<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
rgsabound[0].lLbound = 0;
psa = SafeArrayCreate(VT_R8,1,rgsabound);//VT_R8 <20><>ʾdouble <20><><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD>SAFEARRAY
long idx = 0;
vector<double>::iterator iter = vec.begin();
vector<double>::iterator iter_end = vec.end();
for(;iter!=iter_end;iter++)
{
if(FAILED(SafeArrayPutElement(psa,&idx,&(*iter))))
{
SafeArrayDestroy(psa);//<2F>ͷ<EFBFBD>SAFEARRAY
return NULL;
}
idx++;
}
return psa;
}
SAFEARRAY * CLaipuVbDllMgr::CreatSafeArrayD(vector<double> &vec)
{
//<2F><><EFBFBD><EFBFBD>SAFEARRAY
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].cElements = CalElementsCnt(vec);//<2F><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
rgsabound[0].lLbound = 0;
psa = SafeArrayCreate(VT_R8, 1, rgsabound);//VT_R8 <20><>ʾdouble <20><><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD>SAFEARRAY
long idx = 0;
vector<double>::iterator iter = vec.begin();
vector<double>::iterator iter_end = vec.end();
for (; iter != iter_end; iter++)
{
if (FAILED(SafeArrayPutElement(psa, &idx, &(*iter))))
{
SafeArrayDestroy(psa);//<2F>ͷ<EFBFBD>SAFEARRAY
return NULL;
}
idx++;
}
return psa;
}
#endif