win32编程如何调用另一个程序或者dll…不要刚说一个函数,具体呢

 我来答
LicthDay
2014-01-14 · TA获得超过223个赞
知道小有建树答主
回答量:128
采纳率:100%
帮助的人:142万
展开全部

运行另一个程序的话,有很多办法,比如 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;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式