Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: [C/C++] cannot convert `const wchar_t*' to `const char*'

  Alt 2. Okt 2006, 09:52
Es geht nicht um LoadLibrary, es geht um GetProcAddress. Und da ich die Datentypen TCHAR und das Makro _T benutze ist es egal, ob ich mit Unicode oder Ansi kompiliere. Definiere ich Unicode nimmt er automatisch die WideString Version der Funktion, kompiliere ich mit Ansi nimmt er die Ansi-Version. Beispiel:
Code:
#ifdef UNICODE
    return SetCurrentDirectoryW(
#else
    return SetCurrentDirectoryA(
#endif
Das ist nicht das Problem. Nur definiere ich die Prozedur so:
Code:
TCHAR* const DLL_JNI_CREATE_JVM = _T("JNI_CreateJavaVM");
und rufe GetProcAddress so auf:
Code:
FARPROC proc = GetProcAddress(hLib, DLL_JNI_CREATE_JVM);
Bekomme ich als Fehlermeldung:
Zitat:
cannot convert `TCHAR* const' to `const CHAR*' for argument `2' to `int (* GetProcAddress(HINSTANCE__*, const CHAR*))()'
Was mich etwas misstrauisch macht, ist die Tatsache, dass im PSDK kein Hinweis zu Unicode steht:
Zitat:
Implemented as GetCurrentDirectoryW (Unicode) and GetCurrentDirectoryA (ANSI). Note that Unicode support on Windows Me/98/95 requires Microsoft Layer for Unicode.
wie es sonst üblich ist.

Aus den Header-Dateien werde ich auch nicht schlau:
Code:
WINBASEAPI
FARPROC
WINAPI
GetProcAddress (
    __in HMODULE hModule,
    __in LPCSTR lpProcName
    );
Und:
Code:
//
// for GetProcAddress
//
typedef UINT (WINAPI* PGET_SYSTEM_WOW64_DIRECTORY_A)(__out_ecount_part_opt(uSize, return + 1) LPSTR lpBuffer, __in UINT uSize);
typedef UINT (WINAPI* PGET_SYSTEM_WOW64_DIRECTORY_W)(__out_ecount_part_opt(uSize, return + 1) LPWSTR lpBuffer, __in UINT uSize);

//
// GetProcAddress only accepts GET_SYSTEM_WOW64_DIRECTORY_NAME_A_A,
// GET_SYSTEM_WOW64_DIRECTORY_NAME_W_A, GET_SYSTEM_WOW64_DIRECTORY_NAME_T_A.
// The others are if you want to use the strings in some other way.
//
#define GET_SYSTEM_WOW64_DIRECTORY_NAME_A_A     "GetSystemWow64DirectoryA"
#define GET_SYSTEM_WOW64_DIRECTORY_NAME_A_W    L"GetSystemWow64DirectoryA"
#define GET_SYSTEM_WOW64_DIRECTORY_NAME_A_T TEXT("GetSystemWow64DirectoryA")
#define GET_SYSTEM_WOW64_DIRECTORY_NAME_W_A     "GetSystemWow64DirectoryW"
#define GET_SYSTEM_WOW64_DIRECTORY_NAME_W_W    L"GetSystemWow64DirectoryW"
#define GET_SYSTEM_WOW64_DIRECTORY_NAME_W_T TEXT("GetSystemWow64DirectoryW")

#ifdef UNICODE
#define GET_SYSTEM_WOW64_DIRECTORY_NAME_T_A GET_SYSTEM_WOW64_DIRECTORY_NAME_W_A
#define GET_SYSTEM_WOW64_DIRECTORY_NAME_T_W GET_SYSTEM_WOW64_DIRECTORY_NAME_W_W
#define GET_SYSTEM_WOW64_DIRECTORY_NAME_T_T GET_SYSTEM_WOW64_DIRECTORY_NAME_W_T
#else
#define GET_SYSTEM_WOW64_DIRECTORY_NAME_T_A GET_SYSTEM_WOW64_DIRECTORY_NAME_A_A
#define GET_SYSTEM_WOW64_DIRECTORY_NAME_T_W GET_SYSTEM_WOW64_DIRECTORY_NAME_A_W
#define GET_SYSTEM_WOW64_DIRECTORY_NAME_T_T GET_SYSTEM_WOW64_DIRECTORY_NAME_A_T
#endif
Zu finden in WinBase.h.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat