如何制作带MFC界面的DLL

如何制作带MFC界面的DLL,第1张

如何制作带MFC界面的DLL,解答如下

新建MFC DLL项目,项目名称“MyDLL”,创建新解决方案,解决方案名称为“MFCDLL”。

步骤阅读.2进入MFC DLL向导,选择下一步,选择“使用共享MFC DLL的规则DLL”。点击“完成”按钮

步骤阅读.步骤阅读.3创建MFC DLL项目成功。运行时库选择:属性-->c/c++-->代码生成-->运行库  “多线程调试 DLL (/MDd)”。

步骤阅读.步骤阅读.4点击项目右键,添加MFC类。输入类名:IHpDllWin,选择基类:CDialog,点击完成。

步骤阅读.步骤阅读.5动态库将定义一个导出函数,该函数返回导出界面基类的指针。在IHpDllWin.cpp写导出接口:

// 定义导出接口

extern "C" __declspec(dllexport) IHpDllWin* ShowDialog()

{

// 切记,此处需要加下面这行代码,不然对话框显示不出来。

AFX_MANAGE_STATE(AfxGetStaticModuleState())

IHpDllWin *ph = new IHpDllWin

ph->Create(IHpDllWin::IDD)

ph->ShowWindow(SW_SHOW)

return ph

}

6生成MyDLL.dll。MFC DLL程序创建完成。

7新建MFC应用程序,名称为MyMFC,解决方案名称为MFCEXE。

步骤阅读.8进入MFC应用程序向导,点击下一步,应用程序类型选择“基于对话框”,然后一直点击下一步,最后点击完成。

步骤阅读.步骤阅读.步骤阅读.9在对话框中拖入按钮,双击该按钮,进入代码编辑。

步骤阅读.10采用动态方式调用该动态库,调用步骤如下:

1.加载动态库

HINSTANCE  m_hDll = LoadLibrary("MyDLL.dll")

if (NULL == m_hDll)

{

MessageBox("加载 MyDLL.dll 失败")

}

 2.获取导出函数指针

  typedef IHpDllWin* (*hpDllFun)()

  hpDllFun pShowDlg = (hpDllFun)GetProcAddress(m_hDll,"ShowDialog")

if (NULL==pShowDlg)

{

MessageBox("DLL中函数寻找失败")

return

}

  3.获取导出类对象指针

      IHpDllWin* m_hpwin = pShowDlg()

      获取导出窗口类指针,获取了对该导出窗口的控制。

步骤阅读.11把MyDLL.dll拷到目标工程的Debug目录下,复制IHpDllWin.h到目标工程的目录下。

12添加IHpDllWin.h,右键,添加现有项,选择IHpDllWin.h,添加。

步骤阅读.步骤阅读.13在MyMFCDlg.cpp头部加入#include "IHpDllWin.h",然后编译生成exe。主界面完成。

14运行。按“Ctrl+F5”运行,运行结果如图。

一、DLL制作

1.打开新建工程

2.选择“Active DLL”,单击“打开”按钮。

3.单击打开按钮后,系统在工程中添加一类模块。

4.为方便对DLL的引用可以改一下名称,如将类模块的名称改为Fraction。

5.在本类模块中添加代码如下。

Option Explicit

Public Num

Public Den

Public Sub Add(NUm2, Den2)

Num = NUm2 + Den2

End Sub

Public Sub Sbt(NUm2, Den2)

Num = NUm2 - Den2

End Sub

Public Sub Mul(NUm2, Den2)

Num = NUm2 * Den2

End Sub

Public Sub Div(NUm2, Den2)

Num = NUm2 / Den2

End Sub

6.为与其他工程相区别,可将本工程命名为“Math”。

7.生成DLL文件。

二、DLL引用

1.建立一个普通窗体。

2.添加引用。

3.在程序中添加以下代码。

Option Explicit

Public Frac As New Fraction

Private Sub Command1_Click()

Frac.Add Val(Text1.Text), Val(Text2.Text)

Text3.Text = Frac.Num

End Sub

Private Sub Command2_Click()

Frac.Sbt Val(Text1.Text), Val(Text2.Text)

Text3.Text = Frac.Num

End Sub

Private Sub Command3_Click()

Frac.Mul Val(Text1.Text), Val(Text2.Text)

Text3.Text = Frac.Num

End Sub

Private Sub Command4_Click()

Frac.Div Val(Text1.Text), Val(Text2.Text)

Text3.Text = Frac.Num

End Sub

Private Sub Command5_Click()

Text1 = ""

Text2 = ""

Text3 = ""

End Sub

4.运行程序。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12040312.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存