游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3306|回复: 6

用VC编制DLL程序的方法小结(转帖2)

[复制链接]

79

主题

288

帖子

619

积分

高级会员

Rank: 4

积分
619
发表于 2004-2-25 02:01:00 | 显示全部楼层 |阅读模式
以下是一个编制DLL的程序示例。为此,应先建立一个名为TestDll应用主程序,再创建一个DLL应用,作为主工程的子工程,并在主工程中调用DLL。通过MFC AppWizard创建一个对话框程序,在其中添加一个命令按钮(名称为"调用DLL程序"),其程序运行后的界面如图三。点击按钮后就去调用DLL程序。以下介绍该DLL程序的编制。


图三

  如图一和图二所示,通过MFC AppWizard(dll)输入DLL程序的名称"DLL"后点击"Finish"按钮生成一个DLL程序的基本结构,其中在运行到图二界面时,我们可以选择第一项按钮"Regular DLL with MFC statically linked" 生成常规静态DLL,也可以选择第二项按钮"Regular DLL using shared MFC DLL"生成常规动态DLL,后者的体积远远小于前者。现在的任务是在运行DLL时弹出一个显示"This is My DLL"字样的对话框,点击"确定"后返回调用程序。为此,需要在DLL工程中插入一个对话框资源(该对话框类名为CMyDlg),在DLL.cpp程序开头输入以下代码:

#include "MyDlg.h"

  在DLL.cpp程序最后一行代码"CDLLApp theApp;"后面输入以下代码:

extern "C" _declspec(dllexport) int MyTest()
{
 AFX_MANAGE_STATE(AfxGetStaticModuleState());
 CMyDlg dlg;
 dlg.DoModal();
 return 0;
}

  对DLL编译后生成DLL.dll程序。

  然后,进入主程序TestDll,利用ClassWizard对命令按钮代码段添加下列代码:

void CTestDlg::OnButton1()
{
 // TODO: Add your control notification handler code here
 typedef int(_cdecl *Connect)();
 HINSTANCE hinstDLL=NULL;
 hinstDLL=LoadLibrary("DLL.dll");
 if (hinstDLL)
 {
  Connect Proc;
  Proc = (Connect)GetProcAddress(hinstDLL,"MyTest");
  int iTemp = Proc();
  FreeLibrary(hinstDLL);
 }
 else
 {
  AfxMessageBox("Not found dll !");
 }
}

  为了让TestDll能够调用DLL.dll程序,需要让前者能够"看见" DLL程序。一个Windows程序定位DLL的次序是, 1.包含EXE文件的目录,2.进程的当前工作目录, 3.Windows系统目录, 4.Windows目录,5.列在Path环境变量中的一系列目录。为此,需要将DLL.dll放到上述相关目录中,这样执行主程序TestDll,点击命令按钮就显示以下DLL运行结果,见图四。


图四


79

主题

288

帖子

619

积分

高级会员

Rank: 4

积分
619
 楼主| 发表于 2004-2-25 02:01:00 | 显示全部楼层

Re: 用VC编制DLL程序的方法小结(转帖2)

图三
sf_20042252132.gif

79

主题

288

帖子

619

积分

高级会员

Rank: 4

积分
619
 楼主| 发表于 2004-2-25 02:02:00 | 显示全部楼层

Re: 用VC编制DLL程序的方法小结(转帖2)

图四
sf_2004225226.gif

79

主题

288

帖子

619

积分

高级会员

Rank: 4

积分
619
 楼主| 发表于 2004-2-25 02:06:00 | 显示全部楼层

Re: 用VC编制DLL程序的方法小结(转帖2)

呵呵不好意思  这篇文章的地址是:
http://www.yesky.com/SoftChannel/72342371928702976/20040219/1769612.shtml [em17]











[em21] [em21] [em21] [em21]

3

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
QQ
发表于 2004-2-28 03:50:00 | 显示全部楼层

Re:用VC编制DLL程序的方法小结(转帖2)

zhen shi shen me

37

主题

378

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
发表于 2004-3-3 20:00:00 | 显示全部楼层

Re:用VC编制DLL程序的方法小结(转帖2)

不知道不用MFC能否实现……

理想的是直接装载DLL,不用.def,不用.lib,在头文件里只有函数(和/或接口)原型……

9

主题

311

帖子

333

积分

中级会员

Rank: 3Rank: 3

积分
333
发表于 2004-3-3 23:36:00 | 显示全部楼层

Re:用VC编制DLL程序的方法小结(转帖2)

LoadLibrary就可以了
.def文件好一些,引出名字才和你决定的名字一样
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-14 19:56

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表