我认为这很愚蠢,但我听不懂,
例如,我想使用Windows API,例如GetWindowsDirectory,GetSystemInfo等。我可以直接使用Api或通过GetProcAddress调用:
方法1
在这里,我可以使用LoadLibrary和GetProcAddress调用API:
#include <windows.h>
typedef UINT (WINAPI *GET_WIN_DIR)(LPWSTR lpBuffer, UINT size);
TCHAR infoBuffer[MAX_PATH + 1];
HINSTANSE dllLoad = LoadLibrary("Kernel32.dll");
GET_WIN_DIR function = (GET_WIN_DIR )GetProcAddress(dllLoad, "GetWindowsDirectoryW");
int result = function2(infoBuffer, MAX_PATH + 1);
方法2
在这里,我可以直接调用诸如GetWindowsDirectory之类的API:
#include <windows.h>
TCHAR infoBuffer[MAX_PATH + 1];
GetWindowsDirectory(infoBuffer, MAX_PATH);
我有2个问题:
最佳答案
微软电话
从MSDN Linking an Executable to a DLL:
在我们的项目中,在任何常见情况下我们都使用隐式链接。
我们在两种情况下异常(exception)地使用显式链接:
如果我们使用的DLL本身链接到其他DLL的不同版本(例如,来自Microsoft),则可能会发生第二种情况。当然,这有点关键。实际上,我们试图防止第二种情况。
关于c++ - 加载DLL和直接调用之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50894294/