发信人: tjam() 
整理人: wenbobo(2002-12-06 22:25:29), 站内信件
 | 
 
 
【 在 love1974 (<marquee>令狐冲</) 的大作中提到:  重新定义FARPROC因为在MFC里的定义是无参数的.. #define (MYFARPROC*) xxxx....
  返回MYFARPROC的指针...
  MYFARPROC *m_addr = (MYFARPROC*)GetProcAddress(xxxx); (*m_addr)(xx,xx);
  然后调用可跟参数 are you clear?
  for instance:
  BOOL GetDiscFreeSpace(LPCTSTR lpszPath, DWORDLONG* pnFree)  {     BOOL bRet = FALSE; 
     // We need to determine whether GetDiskFreeSpaceEx is available by    calling LoadLibrary     // or LoadLibraryEx, to load Kernel32.DLL, and then calling the Get   ProcAddress to     // obtain an address for GetDiskFreeSpaceEx.  If GetProcAddress fai   ls, or if     // GetDiskFreeSpaceEx fails with the ERROR_CALL_NOT_IMPLEMENTED cod   e, we use the     // GetDiskFreeSpace function instead.          HINSTANCE hInstance = LoadLibrary("KERNEL32.DLL"); 
     if(hInstance) // If we got the library     { 
       typedef BOOL (FAR WINAPI *MYFARPROC)(LPCSTR,ULARGE_INTEGER*,ULARG   E_INTEGER*,ULARGE_INTEGER*);       MYFARPROC lpfnDLLProc=NULL;       //(LPCSTR,ULARGE_INTEGER*,ULARGE_INTEGER*,ULARGE_INTEGER*);       //= NULL; 
       lpfnDLLProc = (MYFARPROC)GetProcAddress(hInstance, "GetDiskFreeSp   aceExA"); 
       if(lpfnDLLProc) // If we got an address to the function       {  ULARGE_INTEGER nTotalBytes, nTotalFreeBytes, nTotalAvailable; 
  if((*lpfnDLLProc)(lpszPath, &nTotalAvailable, &nTotalBytes, &nTotalFr 
  eeBytes))  //   if(GetDiskFreeSpaceEx(lpszPath, &nTotalAvailable, &nTotalBytes, &   nTotalFreeBytes))    {       *pnFree = nTotalAvailable.QuadPart;       bRet = TRUE;              }        } 
  FreeLibrary(hInstance);     } 
  if(!bRet) // We have to try and use GetDiskFreeSpace()  {              ULONG secpercluster, bytespersec, nooffreeclusters, totaln   oofclusters; 
     if(GetDiskFreeSpace(lpszPath, &secpercluster, &bytespersec,        &nooffreeclusters, &totalnoofclusters))     {        *pnFree = (nooffreeclusters * secpercluster * bytespersec);        bRet = TRUE;      }  } 
      return bRet;  } 
 
  -- 春风再美也比不上你的笑, 没见过你的人不会明了! --   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ ^v^ Name:James Tan                ^o^ ^v^ E-mail:[email protected]  ^o^
  ※ 修改:.tjam 于 Oct  6 15:51:21 修改本文.[FROM: 202.101.14.205] ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.101.14.205] ================================================= 发信人: lightsabre (cheers), 信区: CLanguage 标  题: Re: 容姐,用GETPROCADDRESS返回一个DLL函数指针,然后怎么调用,如何处理函数参数?(举例) 发信站: 网易虚拟社区 (Thu Oct  7 02:24:10 1999), 站内信件 Say, you have a function  double MyMulti(double x, double y); exported from the DLL, do the following in your code: typedef double ( * lpFunc)(double, double); HINSTANCE  hLibrary; lpFunc func1; hLibrary = ::LoadLibrary("yourdllname.dll"); //Load DLL  if (hLibrary != NULL) {   func1 = =(lpFunc) ::GetProcAddress(hLibrary, "MyMulti");   if (func1 != NULL)   {             double dblResult = ((func1)(1.0,2.0));   } }      ::FreeLibrary(hLibrary); -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 4.54.50.182]
 
 
  | 
 
 
 |