在C ++中使用DLL

时间:2013-08-31 10:10:30

标签: c++ visual-studio-2010 dll

我是CPP的新手。我有一个Visual Studio项目,它创建一个DLL。我需要编写一个简单的代码来调用这个dll中的函数。

到目前为止,我浏览的大多数问题都涉及从外部应用程序调用dll的问题。

我想要一个非常简单的教程来介绍这个概念。它加载一次dll然后从一个简单的代码重复调用它的函数而不是app。

一个简单的例子或它的链接将非常有帮助。

提前致谢

2 个答案:

答案 0 :(得分:1)

基本概念是::

  1. LoadLibrary:加载dll。
  2. GetProcAddress:获取dll的导出函数的地址。
  3. MSDN Sample Code     //假设您已使用导出的函数正确构建DLL。     //一个使用LoadLibrary和的简单程序     // GetProcAddress从Myputs.dll访问myPuts。

    #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;
    
    }
    

答案 1 :(得分:1)

您应该在dll项目中导出一个函数。

Ex: "ExportFunc"

你可以在其他项目中使用LoadLibrary,GetProcAddress在dll中使用funciton。 例如:

    #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("DllName.dll")); 

    // If the handle is valid, try to get the function address.

    if (hinstLib != NULL) 
    { 
        ProcAdd = (MYPRO`enter code here`C) GetProcAddress(hinstLib, "ExportFunction"); 

        // 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;

}