win32编程如何调用另一个程序或者dll…不要刚说一个函数,具体呢
1个回答
展开全部
运行另一个程序的话,有很多办法,比如 ShellExecute,WinExec,CreateProcess 等
调用另一个 dll,有静态调用和动态调用两种
静态调用就是在代码里 include 头文件,包含函数定义,并且链接 dll 的 lib 文件,然后直接使用即可,编译器会自动链接这个 dll,但是如果 dll 找不到,那么程序会无法启动
所以对于不确定 dll 是否可以正常使用时,需要使用动态调用
首先需要使用 LoadLibrary 函数
HMODULE WINAPI LoadLibrary(
_In_ LPCTSTR lpFileName
);
成功载入 dll 之后,再使用 GetProcAddress 函数获取 要使用的函数的地址
FARPROC WINAPI GetProcAddress(
_In_ HMODULE hModule,
_In_ LPCSTR lpProcName
);
然后就可以使用了,不需要的时候可以使用 FreeLibrary 释放 dll 内存
BOOL WINAPI FreeLibrary(
_In_ HMODULE hModule
);
下面死是 MSDN 给出的例子作为参考
// A simple program that uses LoadLibrary and
// GetProcAddress to access myPuts from Myputs.dll.
#include <windows.h>
#include <stdio.h>
typedef int (__cdecl *MYPROC)(LPWSTR);
int main( void )
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;
// Get a handle to the DLL module.
hinstLib = LoadLibrary(TEXT("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) (L"Message sent to the DLL function\n");
}
// Free the DLL module.
fFreeResult = FreeLibrary(hinstLib);
}
// If unable to call the DLL function, use an alternative.
if (! fRunTimeLinkSuccess)
printf("Message printed from executable\n");
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询