当前位置:首页 > 百科大全

vc编程实例教程(vc网络编程基本流程代码格式)

2022-11-05 15:10:04

  1.利用MFC AppWizzed(DLL)向导界面创建一个动态链接库工程,向导中的各个选项不变.

  2.在DLL主程序文件中定义几个函数,供其他程序调用,函数的声明必须有下面的的关键字:

  extern"C"TYPE PASCAL EXPORT FunName()

  每个函数体的第一句话必须是:

  AFX_MANAGE_STATE(AfxGetStaticModuleState());

  如下例:

  extern"C"int PASCAL EXPORT TestFun()

  {

  AFX_MANAGE_STATE(AfxGetStaticModuleState());

  return 8;

  }

  3.每个显式调用的动态链接库工程都必须包含一个模块定义文件,即DEF文件,在模块定义文件中必须对外部调用者说明库内函数的名称,书写格式如下:

  TestFun 1

  如:

  ;S12.def:Declares the module parameters for the DLL.

  LIBRARY"S12"

  DESCRIPTION'S12 Windows Dynamic Link Library'

  EXPORTS

  ;Explicit exports can go here

  TestFun 1

  如果有多个函数,则编号从 1开始,不要从 0开始.

  调用:

  显式调用的动态链接库必须使用LoadLibrary()函数装载,因此叫做显式调用.

  1.利MFC AppWizzed(exe)向导界面创建一个普通的project

  2.在实施调用的CPP文件的顶部定义函数指针类型,定义方法:

  typedef TYPE(CALLBACK*FUNPOINTER1)(param list);

  3.在调用点声明函数指针,声明方法:

  FUNPOINTER1 lpfnDllFunc1;

  4.用LoadLibrary()装载动态链接库.

  5.用GetProcAddress()装载函数,装载方法;

  lpfnDllFunc1=(FUNPOINTER1)GetProcAddress(“TestFun”);

  6.调用装载进来的函数:

  lpfnDllFunc1();

  如:

  BOOL CTestDllApp::TestDll()

  {

  HINSTANCE hDll;

  FUNPOINTER1 lpfnDllFunc1;

  FUNPOINTER2 lpfnDllFunc2;

  UINT uReturnVal;

  hDll=LoadLibrary("E:\\S12.dll");//装载动态连接库

  if(hDll!=NULL)

  {

  lpfnDllFunc1=(FUNPOINTER1)GetProcAddress(hDll,"TestFun");//装载函数

  if(!lpfnDllFunc1)

  {

  FreeLibrary(hDll);

  return FALSE;

  }

  else

  {

  int n;

  n=lpfnDllFunc1();//调用函数

  }

  }

  return TRUE;

  }

免责声明:本文由用户上传,如有侵权请联系删除!