用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
lizanhong的公告
<p style="font-size:10pt;color:black"><strong>&nbsp;&nbsp;&nbsp;&nbsp;欢迎访问椰子林的Blog,本网站文章保证原创</strong></p> <br> <strong>联系方式:</strong> <br> 网名:椰子林 <br> QQ:2878685** <br> Email:lifenote(AT)21cn.com <br><br> <br> <input type="button" value="站长声明" onclick="javascript:alert('本站的程序调试环境是:Windows2000 Server + MS.NET2003 + SqlServer2000');"> <hr> <center> <script language=JavaScript src="http://laoan.com/counters/count.php?lizanhong"></script> </center>
文章分类
友情链接
dotnetBlog
DotNet新网
Loveyuki 's BLOG
MSDN中文
中国DotNet俱乐部
椰子林DotNet的天空
海边看星(IT大杂烩)
存档

原创  VC++中DLL的创建和使用 收藏

Dynamic-Link-Library

1、  函数

a)         DLL中:

extern "C" __declspec(dllexport) BOOL isPrime(int num)

{

       BOOL flag = false;

       for(int i = 2 ; i < num ; i ++)

       {

              if(num % i == 0)

                     break;

       }

       if (i == num)

              flag = true;

       else

              flag = false;

 

       return flag;

}

b)        应用程序

typedef BOOL ISPRIME(int);

       ISPRIME *isPrime;

       hm = ::LoadLibrary("mydll2.dll");

       isPrime = (ISPRIME *)::GetProcAddress(hm,"isPrime");

       if(isPrime(8))

              MessageBox("是素数");

       else

              MessageBox("不是素数");

       hm = ::LoadLibrary("mydll2.dll");

 

2、 

a)         DLL

                         i.              IloveYou.h头文件

class __declspec(dllexport)  CILoveYou 

{

public:

       int GetValue();

       void SetValue(int v);

       CILoveYou();

       virtual ~CILoveYou();

 

private:

       int a;

};

                       ii.              IloveYou.cpp程序文件

CILoveYou::CILoveYou()

{

       a = 0;

}

 

CILoveYou::~CILoveYou()

{

 

}

 

__declspec(dllexport) void CILoveYou::SetValue(int v)

{

       this->a = v;

}

 

__declspec(dllexport) int CILoveYou::GetValue()

{

       return a;

}

b)        应用程序

先把#include "ILoveYou.h"文件导入进来,然后在StdAfc.h头文件加入:

class __declspec(dllimport)  CILoveYou;

 

访问该类的代码:

CILoveYou ily;

ily.SetValue(900);

char s[100];

wsprintf(s,"调用了类中的成员哦,值是:%d",ily.GetValue());

ShowMessage(this->GetSafeHwnd(),s);

 

 

MFC 规则DLL

1、  函数

a)         DLL

此类DLL有一个继承了CwinApp的类,但是函数可以不放在该类中。

extern "C" __declspec(dllexport)  BOOL isOdd(int num)

{

       AFX_MANAGE_STATE(AfxGetStaticModuleState());//此句一定要

       if(num % 2 == 0)

              return true;

       else

              return false;

}

b)        应用程序

void CTestdll2Dlg::OnButton5()

{

       // TODO: Add your control notification handler code here

       typedef BOOL ISODD(int);

       ISODD *isOdd;

 

       HINSTANCE hm;

       if(hm = ::LoadLibrary("mfcdll4.dll"))

       {

              isOdd = (ISODD *)::GetProcAddress(hm,"isOdd");

              if(isOdd)

              {

                     if(isOdd(9))

                            MessageBox("是偶数");

                     else

                     MessageBox("不是偶数");

              }

              else

              {

                     MessageBox("有问题");

              }

              ::FreeLibrary(hm);

       }

       else

       {

              MessageBox("DLL加载失败");

       }

}

      

2、 

a)         DLL中的代码

                         i.              Clzh类的头文件:lzh.h

class AFX_EXT_CLASS Clzh  //此处一定要用AFX_EXT_CLASS

{

public:

       CString GetValue();

       void SetValue(CString str);

       Clzh();

 

private:

       CString str;

};

 

                       ii.              Clzh类的实现文件:lzh.cpp

Clzh::Clzh()

{

 

}

 

__declspec(dllexport) void Clzh::SetValue(CString str)

{

       AFX_MANAGE_STATE(AfxGetStaticModuleState());

       this->str = str;

}

 

__declspec(dllexport) CString Clzh::GetValue()

{

       AFX_MANAGE_STATE(AfxGetStaticModuleState());

       return str;

}

 

b)        应用程序

StdAfx.h中头文件中加入:class __declspec(dllimport)  Clzh;

在要访问该类的地方加入头文件:#include "lzh.h"

程序如下:

void CTestdll2Dlg::OnButton7()

{

       // TODO: Add your control notification handler code here

       Clzh lzh;

       lzh.SetValue("abc");

       MessageBox(lzh.GetValue());

}

发表于 @ 2005年01月28日 12:16:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:一个自定义窗口属性的控件(C#) | 新一篇:N天没更新这个博客了,呵,重新开始!

  • 发表评论
  • 评论内容:
  •  
Copyright © lizanhong
Powered by CSDN Blog