工控编程吧

标题: 上位机MFC 如何在应用程序内部注册ActiveX 控件 [打印本页]

作者: qq263946146    时间: 2019-8-16 11:22
标题: 上位机MFC 如何在应用程序内部注册ActiveX 控件
使用按钮调用下面函数,浏览控件文件,打开文件。

  1. void CDemoDlg::OnTest()
  2. {
  3.         //文件扩展名
  4.         CString strFilter = _T("ActiveX 控件|*.*||");
  5.         //创建文件对话框
  6.         CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY |
  7.                 OFN_OVERWRITEPROMPT, strFilter);
  8.         //对话框标题
  9.         dlg.m_ofn.lpstrTitle = _T("浏览文件");

  10.         if(dlg.DoModal() == IDOK)
  11.         {
  12.                 //获得文件路径
  13.                 CString strPathName = dlg.GetPathName();

  14.                 if (DllRegister(strPathName))
  15.                 {
  16.                         AfxMessageBox(_T("注册ActiveX 控件成功。"));
  17.                 }
  18.                 else
  19.                 {
  20.                         AfxMessageBox(_T("注册ActiveX 控件失败。"));
  21.                 }
  22.         }       
  23. }
复制代码
如上代码调用 了我们自己编写的函数DllRegister。

  1. BOOL DllRegister(LPCTSTR lpszDllName)
  2. {
  3.         ASSERT(lpszDllName != NULL);
  4.         ASSERT(AfxIsValidString(lpszDllName));

  5.         //加载ActiveX控件
  6.         HINSTANCE hLib = LoadLibrary(lpszDllName);
  7.         if (hLib == NULL)
  8.         {
  9.                 TRACE(_T("%s加载失败\n"), lpszDllName);
  10.                 return FALSE;
  11.         }

  12.         //获得注册函数DllRegisterServer地址
  13.         FARPROC lpDllEntryPoint;
  14.         lpDllEntryPoint = GetProcAddress(hLib, _T("DllRegisterServer"));

  15.         //调用注册函数DllRegisterServer
  16.         if (lpDllEntryPoint != NULL)
  17.         {
  18.                 if (FAILED((*lpDllEntryPoint)()))
  19.                 {
  20.                         TRACE(_T("调用DllRegisterServer失败\n"));
  21.             FreeLibrary(hLib);
  22.             return FALSE;
  23.                 }
  24.                 else
  25.                 {
  26.                         FreeLibrary(hLib);
  27.                         return TRUE;
  28.                 }
  29.         }
  30.         else
  31.         {
  32.                 TRACE(_T("调用DllRegisterServer失败\n"));
  33.                 FreeLibrary(hLib);
  34.                 return FALSE;
  35.         }
  36. }
复制代码
这样就可以注册了。






欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4