开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1279|回复: 1
收起左侧

[图文教程] VC++.NET中定义和使用MFC DLL(二)

[复制链接]

发表于 2013-8-3 19:35:02 | 显示全部楼层 |阅读模式   广东省湛江市
在VC.Net中使用DLL文件

  新建一个基于对话框的VC.Net工程DemoTestDLL,界面如下图(运行结果图):



  为了让DemoTestDLL能够调用TestDLL.dll程序,需要让前者能够"看见" DLL程序。我们将TestDLL.dll文件考到DemoTestDLL的Debug目录下,一个Windows程序定位DLL的次序是:

  1、 包含EXE文件的目录。

  2、 进程的当前工作目录。

  3、 Windows系统目录。

  4、 Windows目录。

  5、 列在Path环境变量中的一系列目录。

  在测试DLL按钮添加下面代码:
程序代码:
void CDemoTestDLLDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//声明DLL函数
typedef void (_cdecl *GETHOSTNAME)(LPTSTR strHostName);
typedef void (_cdecl *GETSYSTEMTYPE)(char * strSystemType);
typedef void (_cdecl *GETIPADDRESSLIST)(char ** lpIPList,DWORD *lpNumber);

//声明函数句柄
HMODULE hTestDLL = NULL;
GETHOSTNAME GetHostName = NULL;
GETSYSTEMTYPE GetSystemType = NULL;
GETIPADDRESSLIST GetIpAddressList = NULL;

// 加载动态链接库
hTestDLL = LoadLibrary("TestDLL.dll");
if(hTestDLL == NULL)\
{
printf("cannot load LCDDLL.dll\n");
exit(0);
}

/*** 找到每个函数的入口 ****/
//系统名称
GetHostName = (GETHOSTNAME)GetProcAddress(hTestDLL,"GetHostName");
if(GetHostName==NULL)
{
printf("cannot load process GetHostName\n");
FreeLibrary(hTestDLL);
exit(1);
}

//操作系统类型
GetSystemType = (GETSYSTEMTYPE)GetProcAddress(hTestDLL,"GetSystemType");
if(GetSystemType==NULL)
{
printf("cannot load process GetSystemType\n");
FreeLibrary(hTestDLL);
exit(1);
}

//IP地址列表
GetIpAddressList = (GETIPADDRESSLIST)GetProcAddress(hTestDLL,"GetIPAddressList");
if(GetSystemType==NULL)
{
printf("cannot load process GetIpAddressList\n");
FreeLibrary(hTestDLL);
exit(1);
}

/*** 使用LPTSTR和使用char*定义的效果是一样的 ***/

//取机器名称
LPTSTR szHostName = new char[1024];
(*GetHostName)(szHostName);

//取操作系统类型
char* szSystemType = new char[1024];
(*GetSystemType)(szSystemType);

//IP Address List
DWORD ipListNumber = 0;
//声明方式一
//LPTSTR* lpAddress = new LPTSTR[256];
//声明方式二
char** lpAddress = new char*[256];
for(int i=0;i<256;i++)
{
lpAddress = NULL;
}
(*GetIpAddressList)(lpAddress,&ipListNumber);

//显示在界面
m_setHostName.SetWindowText(szHostName);
m_setSystemType.SetWindowText(szSystemType);

//将IP添加到list 中
for(int i=0;i<IPLISTNUMBER;I++)
{
m_IPList.AddString(lpAddress);
}
}
 编译运行的结果如上图所示。

结帖率:80% (4/5)
发表于 2013-8-3 20:40:40 | 显示全部楼层   湖南省长沙市
楼主已经悲催了  - -
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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