0

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

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

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

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

提前致谢

4

2 回答 2

1

基本概念是:

  1. LoadLibrary:加载dll。
  2. GetProcAddress:获取dll导出函数的地址。

MSDN 示例代码 // 假设您已经正确构建了带有导出函数的 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;

}
于 2013-08-31T10:32:49.987 回答
1

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

Ex: "ExportFunc"

并且您可以在其他项目中使用 LoadLibrary、GetProcAddress 来使用 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("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;

}
于 2017-09-26T00:50:46.677 回答