AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VC编程

在ActiveX控件中如何动态调用DLL函数

51自学网 2015-08-30 http://www.wanshiok.com

 

#define Const_Terminator 0x20

#pragma data_seg("mydata")

static HINSTANCE DLLInst = NULL; //动态库句柄

#pragma data_seg() //

HANDLE hCom; //COM串口句柄

//------------------------------------------------------
//POLICE.DLL动态库函数功能定义
//------------------------------------------------------
HANDLE (__stdcall *Init_comm)(LPSTR str);//初始化通信口
BYTE (__stdcall *Exit)(HANDLE hCom);//关闭通信口
BYTE (__stdcall *Protocol)(HANDLE hCom,BYTE cmd,BYTE len,BYTE *_dt,BYTE *prlen,BYTE *prdt);//通信协议
BYTE (__stdcall *Pipe_control)(HANDLE hCom,BYTE mode);//多路控制typedef
BYTE (__stdcall *Dev_escape)(HANDLE hCom);//断开多路控制


//----------------------------------------------------------------------------//
// 功能:加载Police.dll动态库和其中的一些功能函数
// 输入/输出参数:无
// 版本:1.0
// 修改:
//----------------------------------------------------------------------------// void CPosCtrl::InitDll()
{
DLLInst=LoadLibrary("police.dll");
if(DLLInst!=NULL)
{
Init_comm=(HANDLE(__stdcall *)(LPSTR))GetProcAddress(DLLInst,"Init_comm");
Exit=(BYTE(__stdcall *)(HANDLE))(GetProcAddress(DLLInst,"Exit"));
Protocol=(BYTE(__stdcall *)(HANDLE,BYTE,BYTE,BYTE *_dt,BYTE *prlen,BYTE *prdt))(GetProcAddress(DLLInst,"Protocol"));
Pipe_control=(BYTE(__stdcall *)(HANDLE,BYTE))(GetProcAddress(DLLInst,"Pipe_control"));
Dev_escape=(BYTE(__stdcall *)(HANDLE))(GetProcAddress(DLLInst,"Dev_escape"));
}
else
{
::MessageBox(NULL,"加载动态库失败!", "提示信息", MB_OK | MB_ICONINFORMATION);
exit(0);
}
}


//----------------------------------------------------------------------------//
// 功能:释放动态库
// 输入/输出参数:无
// 版本:1.0
// 修改:
//----------------------------------------------------------------------------// void CPosCtrl::ExitDll()
{
if(DLLInst!=NULL)
FreeLibrary(DLLInst);
}


//----------------------------------------------------------------------------//
// 功能:控件接口方法,对外提供关闭串口,释放动态库。
// 输入/输出参数:无 // 版本:1.0
// 修改:
//----------------------------------------------------------------------------// STDMETHODIMP CPosCtrl::Quit()
{
// TODO: Add your implementation code here

(*Exit)(hCom);
ExitDll();
::MessageBox(NULL,"关闭COM口成功","提示信息",MB_OK | MB_ICONINFORMATION);
return S_OK;
}

STDMETHODIMP CPosCtrl::get_ComNo(short *pVal)
{
// TODO: Add your implementation code here
*pVal = m_ComNo;
return S_OK;
}

STDMETHODIMP CPosCtrl::put_ComNo(short newVal)

{
// TODO: Add your implementation code here
m_ComNo = newVal;
return S_OK;
}

//----------------------------------------------------------------------------//
// 功能:提供初化动态库的对外接口,并实现打开口串口的功能。
// 输入/输出参数:11--要打开的串口号。
// 版本:1.0
// 修改:
//----------------------------------------------------------------------------// STDMETHODIMP CPosCtrl

 
 
说明
:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。

上一篇:一个简单的学生成绩管理软件(ODBC开发)  下一篇:自己动手制作一款简洁实用的图片浏览器