有那位知道怎么在vc中(*.exe)中调用*.dll(10分)

  • 主题发起人 主题发起人 h4y3z4
  • 开始时间 开始时间
H

h4y3z4

Unregistered / Unconfirmed
GUEST, unregistred user!
有那位知道怎么在vc中(*.exe)中调用*.dll
 
如果是自己开发的DLL, 编译DLL时会生成LIB文件,把这个LIB文件链进你的工程,然后include进dll的H文件,就可以直接用了.
如果别人开发的第三方组件,一般也会给LIB文件和H文件,一样做.
如果都没有,但是知道函数名,那么用
HMODULE LoadLibrary(
LPCTSTR lpFileName
);
打开这个DLL,返回一个handle, 再用
FARPROC GetProcAddress(
HMODULE hModule,
LPCSTR lpProcName
);
得到函数的地址,然后就可以调用这个函数了.
完了FreeLibrary()就可以了.这叫运行时链接.
如果连函数接口也不知道,那就用一些工具软件如windepandent打开DLL看看输出函数的定义.
如下代码:
VOID main(VOID)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;

// Get a handle to the DLL module.
hinstLib = LoadLibrary("myputs.dll");

// If the handle is valid, try to get the function address.
if (hinstLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts");

// If the function address is valid, call the function.

if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
(ProcAdd) ("message via DLL function/n");
}

// Free the DLL module.
fFreeResult = FreeLibrary(hinstLib);
}

// If unable to call the DLL function, use an alternative.
if (! fRunTimeLinkSuccess)
printf("message via alternative method/n");
}
 
接受答案了.
 
后退
顶部