Umgang mit EnumUILanguage()
-
Hallo Leute,
ich habe ein großes Problem, ich möchte zum Zwecke der Internationalisierung heraus bekommen, welche Sprachen auf einem Windows System installiert sind. Die MSDN empfielt dafür die Funktion EnumUILanguages(https://msdn.microsoft.com/en-us/library/windows/desktop/dd317834%28v=vs.85%29.aspx).
Diese verlangt in der Eingabe diesen Datentyp: UILANGUAGE_ENUMPROC .
Das ist ein Typedef auf einen Funktionspointer mit Rückgabewert Bool. Ich habe EnumUILanguage folgendermaßen implementiert:EnumUILanguagesW(std::bind(&addLanguage, this, std::placeholders::_1, std::placeholders::_2), MUI_LANGUAGE_NAME, 0);
Dazu noch meine Implementierung von addLanguage:
BOOL CALLBACK Internationalization::addLanguage(_In_ LPTSTR lpUILanguageString, _In_ LONG_PTR lParam) { std::wstring langIdentifier(lpUILanguageString); langIdentifier = langIdentifier.substr(0, langIdentifier.find_first_of(L'-')); if (m_mLangIDToMapMessageToString.find(langIdentifier) == m_mLangIDToMapMessageToString.end()) { m_mLangIDToMapMessageToString.emplace(std::make_pair(langIdentifier, nullptr)); } return TRUE; }
Wie ihr vielleicht erkennt ist addLanguage eine Member-Function, der Aufruf von EnumUILanguage erfolgt in der selben Klasse.
Ich habe nun das Problem, dass der MSVC 2013 Compiler mir folgende Fehlermeldung zeigt:
Es ist keine passende Konvertierungsfunktion von ""std::_Bind<false, void, std::_Pmd_wrap<BOOL (__stdcall Internationalization::*)(LPTSTR lpUILanguageString, LONG_PTR lParam), BOOL __stdcall (LPTSTR lpUILanguageString, LONG_PTR lParam), Internationalization>, Internationalization *, std::_Ph<1> &, std::_Ph<2> &>"" in ""UILANGUAGE_ENUMPROCW"" vorhanden.Habt ihr irgendeine Idee wie man mit EnumUILanguage umgeht? Ich habe leider kein vernünftiges Beispiel für die Funktion gefunden.
Vielen Dank schonmal
-
Dieser Thread wurde von Moderator/in Arcoth aus dem Forum C++ (alle ISO-Standards) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
EnumUILanguagesW ist eine C-Funktion. Einer solchen musst du eine freie Funktion übergeben, Funktionsobjekte (std::bind) und Memberfunktionen gehen nicht. Um den nötigen Kontext (wie etwa einen this-Zeiger oder einen Zeiger auf ein std::function-Objekt) übergeben zu können, existiert "param".
-
Siehe Code in #Post 5 & 6:
http://forum.vingrad.ru/topic-211121.html
-
-
Vielen Dank,
sieht jetzt soweit erst einmal gut aus!