精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>技术精解:内存、进程、线程等>>怎样使用GetProcAddress返回的DLL指

主题:怎样使用GetProcAddress返回的DLL指
发信人: 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]



[关闭][返回]