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.

261 lines
7.7 KiB
C++

#include "StdAfx.h"
#include "LaipuVbDllMgr.h"
#include "LogMgr.h"
#include "SinglechipCardMgr.h"
#include "Mirror.h"
CLaipuVbDllMgr *gLaipuVbDllMgr = new CLaipuVbDllMgr;
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;
CoInitialize(NULL);
//<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))
{
gLogMgr->WriteDebugLog("mark dll <20><>com <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>!",_LOG_ERROR);
}
else
{
m_bIni = true;
gLogMgr->WriteDebugLog("mark dll <20><>com <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>");
}
}
//ͨ<><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 = size;//<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<size;index++)
{
if(FAILED(SafeArrayPutElement(psa,&index,&ComArr[index])))
{
return;
}
}
short card = 1;//<2F>ѻ<EFBFBD><D1BB><EFBFBD>1 , pci <20><>0
if(gMirror->IsUsePciCard())
{
gLogMgr->WriteDebugLog(_T("ʹ<EFBFBD><EFBFBD>pci <20><>"));
card = 0;
}
short LaserFlg = 0;//<2F>߿<EFBFBD><DFBF><EFBFBD><EFBFBD><EFBFBD>?
if(gMirror->IsLaserSwitch())
{
LaserFlg = 1;
}
short LaserType = (LASER_TYPE)gMirror->GetLaserType();
short MirrorIdx = 0;//<2F><>ʱֻ<CAB1><D6BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CString LogStr;
LogStr.Format(_T("[low] = [%d] ,[High] = [%d]"),low,High);
gLogMgr->WriteDebugLog(LogStr);
LogStr.Format(_T("[card] = [%d] ,[LaserType] = [%d]"),card,LaserType);
gLogMgr->WriteDebugLog(LogStr);
LogStr.Format(_T("[MirrorIdx] = [%d] ,[LaserFlg] = [%d]"),MirrorIdx,LaserFlg);
gLogMgr->WriteDebugLog(LogStr);
short ret = pMarkingScanCom->Marking_init_pci(
&low,//<2F><><38><CEBB><EFBFBD><EFBFBD><EFBFBD>˿ڳ<CBBF>ʼֵ
&High,//<2F><><38><CEBB><EFBFBD><EFBFBD><EFBFBD>˿ڳ<CBBF>ʼֵ
&card,
&LaserType,
&MirrorIdx,//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ò<EFBFBD>ͬ<EFBFBD><CDAC>У׼<D0A3>ļ<EFBFBD>
&psa,
&LaserFlg
);
gLogMgr->WriteDebugLog("Marking_init_pci","ret",ret);
SafeArrayDestroy(psa);//<2F>ͷ<EFBFBD>SAFEARRAY <20>ռ<EFBFBD>
}
//<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);
}
//DA <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>808 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ѹ)
//V <20>ǵ<EFBFBD>ѹֵ(<28><><EFBFBD><EFBFBD>10 V),XY = 0<><30>ʾX<CABE><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ʾY<CABE><59><EFBFBD><EFBFBD>
void CLaipuVbDllMgr::Marking_DA(double V,short XY)
{
pMarkingScanCom->Marking_DA(&V,&XY);
}
#if 1
void CLaipuVbDllMgr::CallMarkingData(vector<vector<Dbxy>> &vec)
{
4 years ago
/*ofstream file;
string name = "MarkData.txt";
if (gProgram_SZ_XL->IsbSelMarkMode())
{
name = "MarkData-Sel.txt";
}
file.open(name);
for ( auto itr:vec)
{
for (auto data:itr)
{
file << data.x << "," << data.y<<endl;
}
}
file.close();*/
SAFEARRAY *pSafeArr = CreatSafeArray(vec);
if(pSafeArr)
{
pMarkingScanCom->Marking_data(&pSafeArr);
SafeArrayDestroy(pSafeArr);//<2F>ͷ<EFBFBD>SAFEARRAY
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>صĸ<D8B5><C4B8><EFBFBD>
int CLaipuVbDllMgr::CalElementsCnt(vector<vector<Dbxy>> &vec)
{
int ret = 0;
vector<vector<Dbxy>>::iterator iter = vec.begin();
vector<vector<Dbxy>>::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;
}
4 years ago
//<2F><>װSAFEARRAY <20>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>Ҫ<EFBFBD>ڵ<EFBFBD><DAB5>ú<EFBFBD><C3BA>ͷ<EFBFBD><CDB7><EFBFBD>Դ)
SAFEARRAY * CLaipuVbDllMgr::CreatSafeArray(vector<vector<Dbxy>> &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<Dbxy>>::iterator iter = vec.begin();
vector<vector<Dbxy>>::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<Dbxy>::iterator iter1 = (*iter).begin();
vector<Dbxy>::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;
}
#endif