我不太了解DLL,所以我构建了一个简单的例子,我喜欢一些帮助。我这里有一个简单的dll。
// HelloDLL.cpp
#include "stdafx.h"
int __declspec(dllexport) Hello(int x, int y);
int Hello(int x, int y)
{
return (x + y);
}
在我运行Hello(int x, int y)
后,如何在单独的程序中调用LoadLibrary()
功能?这是我到目前为止的粗略布局,但我不确定我所拥有的是否正确,如果是,如何继续。
// UsingHelloDLL.cpp
#include "stdafx.h"
#include <windows.h>
int main(void)
{
HINSTANCE hinstLib;
// Get the dll
hinstLib = LoadLibrary(TEXT("HelloDLL.dll"));
// If we got the dll, then get the function
if (hinstLib != NULL)
{
//
// code to handle function call goes here.
//
// Free the dll when we're done
FreeLibrary(hinstLib);
}
// else print a message saying we weren't able to get the dll
printf("Could not load HelloDLL.dll\n");
return 0;
}
有人可以帮我解决如何处理函数调用吗?我应该注意的任何特殊情况,以便将来使用dll吗?
答案 0 :(得分:1)
加载库后,您需要找到函数指针。 Microsoft提供的功能是GetProcAdderess。不幸的是,你必须知道功能原型。如果您不知道,我们将一直到COM / DCOM等。可能超出您的范围。
FARPROC WINAPI GetProcAddress( _In_ HMODULE hModule, _In_ LPCSTR lpProcName );
所以在你的例子中,你所做的就是这样:
typedef int (*THelloFunc)(int,int); //This define the function prototype
if (hinstLib != NULL)
{
//
// code to handle function call goes here.
//
THelloFunc f = (THelloFunc)GetProcAddress(hinstLib ,"Hello");
if (f != NULL )
f(1, 2);
// Free the dll when we're done
FreeLibrary(hinstLib);
}