class COMPARAMEXT_API ComParam
{
public:
ComParam( int nBaudRate, // 波特率
int nByteSize = 8, // 数据位
int nParity = 0, // 校验位 0 - NOPARITY
int nStopBits = 0); // 停止位 0 - ONESTOPBIT(参考winbase.h中的定义)
};
3.为了达到使用dll的目的,先封装几个简单的类:
CDllLoad类:src/PTZ_Test/controls/DllLoad.h(这个类仅在src/PTZ_Test/controls/PTZDll.h)
// DllLoad.h
#pragma once
class CDllLoad
{
public:
CDllLoad()
{
}
virtual ~CDllLoad(void)
{
Close();
}
void Open(LPCTSTR lpszName) // 加载DLL
{
if (m_hModule)
{
Close();
}
m_hModule = ::LoadLibrary(lpszName);
}
void Close()
{
::FreeLibrary(m_hModule); // 卸载DLL
m_hModule = NULL;
}
operator HMODULE() { return m_hModule;}
PROC GetProcAddress(LPCSTR lpProcName)
{
return ::GetProcAddress(m_hModule, lpProcName); // 取得函数入口地址
}
protected:
HMODULE m_hModule;
};
CPTZDll类:src/PTZ_Test/controls/DllLoad.h(主要功能:根据插件产生出该DLL的支持的协议对象,然后由该对象的函数调用需要的功能,由于函数调用时实际使用的是dll的类的成员函数,所以对象存在时必须也有一份CPTZDll的实例而且是打开状态的。)
// PTZDll.h
#pragma once
#include "DllLoad.h"
#include "PTZInterface.h"
class CPTZDll
{
typedef CPTZInterface * (__stdcall* CREATE_PTZ_INSTANCE)(const char * pszProtocolsName);
public:
CPTZDll() // 成员初始化
: m_pDllLoad(0)
, m_pfnCreatePTZInstance(0)
, m_ppProtocolsName(0)
{
}
~CPTZDll()
{
Close();
delete m_pDllLoad;
m_pDllLoad =0;
}
BOOL OpenPlugIn(LPCTSTR lpszName) // 打开插件,如果是有效的插件返回TRUE,否则FALSE
{
if (m_pDllLoad)
Close();
else
{
m_pDllLoad = new CDllLoad();
m_pDllLoad->Open(lpszName);
}
m_pfnCreatePTZInstance = (CREATE_PTZ_INSTANCE)m_pDllLoad->GetProcAddress("CreatePTZInstance");
m_ppProtocolsName = (const char **)m_pDllLoad->GetProcAddress("ProtocolNames");
return (m_ppProtocolsName && m_ppProtocolsName[0]);
}
void Close()
{
m_pfnCreatePTZInstance = 0;
m_ppProtocolsName = 0;
if (m_pDllLoad)
m_pDllLoad->Close();
}
const char ** GetSupportProtocols()
{
return m_ppProtocolsName;
}
CPTZInterface * CreatePTZInstance(LPCTSTR lpszProtolName) // 根据该插件内的某个协议产生出一个对象
{
if (m_pfnCreatePTZInstance)
{
return m_pfnCreatePTZInstance(lpszProtolName);
}
return 0;
}
private:
CDllLoad * m_pDllLoad;
CREATE_PTZ_INSTANCE m_pfnCreatePTZInstance;
const char ** m_ppProtocolsName;
};
CPlugInInfo类:src/PTZ_Test/controls/PTZProtocolFind.h和src/PTZ_Test/controls/ptzprotocolfind.cpp
//=========================================================
//
// Copyright (c) 2000-2004 iWise Technologies,Co. Ltd.
// All Rights Reserved.