当前位置:首页
开发技术指南» 文章正文
    引言:

 ·一个习题    »显示摘要«
    摘要: main() { int x,y; scanf("%d",&x); if(x<=1) y=x; else if(1<x&&x<10) y=(2x-1); else y=(3x-11); printf("y=%d",y); } ......
    摘要: 从软件角度来说,usb设备能够判断是否已经与pc端联接么? ......


如何动态调用DLL

编程中我遇到了一个动态编译的DLL,没有.LIB   和.H  
  在APP中如下调用   ,可是我在其他类中如何使用这些函数呀?  
   
   
  //函数定义  
  typedef   LONG   (CALLBACK*   LPFNDLLFUNC1)(LONG);  
  //   定义一个函数指针的类型   LPFNDLLFUNC1   ,   这个类型是自己定义的,类型名为   LPFNDLLFUNC1      
   
  typedef   LONG   (CALLBACK*   LPFNDLLFUNC2)(LONG);  
  typedef   LONG   (CALLBACK*   LPFNDLLFUNC3)(LONG,CHAR   *,CHAR   *);  
  typedef   LONG   (CALLBACK*   LPFNDLLFUNC4)(LONG,CHAR   *,CHAR   *);  
  typedef   LONG   (CALLBACK*   LPFNDLLFUNC5)(LONG);  
  typedef   LONG   (CALLBACK*   LPFNDLLFUNC6)();  
   
  HINSTANCE   hInsDLL;  
  LPFNDLLFUNC1   fnInitModem;           //   Function   pointer   1   这里利用自己定义的类型名LPFNDLLFUNC1定义了一个fnInitModem的函数指针!  
  LPFNDLLFUNC2   fnCloseModem;         //   Function   pointer   2  
  LPFNDLLFUNC3   fnSendMsg;               //   Function   pointer   3  
  LPFNDLLFUNC4   fnReadMsgEx;           //   Function   pointer   4  
  LPFNDLLFUNC5   fnGetStatus;           //   Function   pointer   5  
  LPFNDLLFUNC5   fnGetSndCount;  
  LPFNDLLFUNC5   fnGetRecCount;  
  LPFNDLLFUNC5   fnClrSndBuf;  
  LPFNDLLFUNC5   fnClrRecBuf;  
  LPFNDLLFUNC6   fnDogSerial;  
   
   
  //====------------------------------------------------  
          //取得函数地址  
  hInsDLL=LoadLibrary("MonDem");  
  if(hInsDLL==NULL){  
  ShowMessageNULL(   IDS_LOADDLL_FAILED   );  
  }   else   {  
  fnInitModem       =   (LPFNDLLFUNC1)GetProcAddress(hInsDLL,"fnInitModem");  
  fnCloseModem     =   (LPFNDLLFUNC2)GetProcAddress(hInsDLL,"fnCloseModem");  
  fnSendMsg           =   (LPFNDLLFUNC3)GetProcAddress(hInsDLL,"fnSendMsg");  
  fnReadMsgEx       =   (LPFNDLLFUNC4)GetProcAddress(hInsDLL,"fnReadMsgEx");  
  fnGetStatus       =   (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnGetStatus");  
  fnGetSndCount   =   (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnGetSndCount");  
  fnGetRecCount   =   (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnGetRecCount");  
  fnClrSndBuf       =   (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnClrSndBuf");  
  fnClrRecBuf       =   (LPFNDLLFUNC5)GetProcAddress(hInsDLL,"fnClrRecBuf");  
  fnDogSerial       =   (LPFNDLLFUNC6)GetProcAddress(hInsDLL,"fnDogSerial");  
  }  
   
 

NO.1   作者: phoenix96_2000

你哪儿出错了?  
   
  testfn.h:  
   
  #pragma   once  
  #include   <windows.h>  
  typedef   LONG   (CALLBACK   *   LPFNDLLFUNC1)(LONG);  
  extern   LPFNDLLFUNC1   fnInitModem;  
   
   
  testfn.cpp  
  #include   "stdafx.h"  
  #include   "testfn.h"  
   
  LPFNDLLFUNC1   fnInitModem   =   NULL;  
   
   
  main.cpp:  
  #include   "stdafx.h"  
  #include   "testfn.h"  
   
  int   main()  
  {  
    //先初始化fnInitModem...   LoadLibrary,   GetProcAddress..  
   
    long   l   =   fnInitModem(0);  
     
    return   0;  
  }  
   
  完全OK啊


 ·菜鸟问题:mysql有什么好处    »显示摘要«
    摘要: mysql是不是像access一样的小数据库? 它为什么这么流行?有什么好处? 我对mysql一点不懂,弱弱地来问一下 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE