LoadLibrary()
- макрос препроцессора. Он отображается в LoadLibraryW()
или LoadLibraryA()
в зависимости от того, определено ли UNICODE
или нет, соответственно. LoadLibraryW()
принимает в качестве входных данных строку const wchar_t*
, а LoadLibraryA()
вместо этого принимает строку const char *
.
Строковый литерал "MyDLL.dll"
- это const char[10]
, который распадается в const char *
. Если UNICODE
определено, LoadLibrary("MyDLL.dll")
не будет компилироваться, так как вы не можете передать const char *
, где ожидается const wchar_t *
.
TEXT()
также является макросом препроцессора. Если UNICODE
определено, он добавляет префикс L
к указанному литералу, делая буквальное использование wchar_t
, в противном случае префикс не добавляется и вместо него используется char
.
Таким образом, если UNICODE
, тогда LoadLibrary(TEXT("MyDLL.dll"))
компилируется как LoadLibraryW(L"MyDLL.dll")
, в противном случае он компилируется как LoadLibraryA("MyDLL.dll")
.
Большинство Win32 API, которые работают с текстовыми данными, имеют похожие A
и W
версии и соответствующие макросы препроцессора с поддержкой UNICODE
. Таким образом, при использовании символьных / строковых литералов с этими API всегда следует использовать макрос TEXT()
. В противном случае просто используйте API A
и W
напрямую по мере необходимости, в зависимости от типа текстовых данных, с которыми вы работаете.