发信人: 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]
|
|