我是CPP的新手。我有一个创建 dll 的 Visual Studio 项目。我需要编写一个简单的代码来调用这个 dll 中的函数。
到目前为止,我浏览的大多数问题都涉及从外部应用程序调用 dll 的问题。
我想要一个非常简单的教程来介绍这个概念。它加载一次 dll,然后从简单的代码而不是应用程序重复调用其函数。
一个简单的示例或指向它的链接将非常有帮助。
提前致谢
我是CPP的新手。我有一个创建 dll 的 Visual Studio 项目。我需要编写一个简单的代码来调用这个 dll 中的函数。
到目前为止,我浏览的大多数问题都涉及从外部应用程序调用 dll 的问题。
我想要一个非常简单的教程来介绍这个概念。它加载一次 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;
}
您应该在 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;
}