科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VC++.NET中定义和使用MFC DLL

VC++.NET中定义和使用MFC DLL

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

DLL指的是动态链接库,它是一个可以被多个应用程序(甚至是不同语言编写的应用程序)同时调用的可执行二进制文件

作者:sundy26 来源:论坛 2007年11月16日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
在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[i] = 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[i]);
}
}
  编译运行的结果如上图所示。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章