Nach Project Umstellung auf Unicode spinnt die Atltransaction



  • Hallo zusammen,

    ich muss noch mal eine doofe Frage stellen.

    Ich habe mein Projekt in VisualStudio 2013 auf Zeichensatz Uniccode umgestellt.
    Alle Fehler aus dem Project Quellcode habe ich mittlerweile beseitigt(glaube ich).
    Nun wird beim Kompilieren aber immer wieder dieser Fehler ausgegeben:

    Fehler 3 error C2664: 'FARPROC GetProcAddress(HMODULE,LPCSTR)' : Konvertierung von Argument 2 von 'const wchar_t [20]' in 'LPCSTR' nicht möglich C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\atltransactionmanager.h

    Was er mir damit sagen will ist mir schon klar aber nicht warum.
    Es Handelt sich bei der Klasse ja um eine Klasse vom VisualStudio und ich kann mir nicht vorstellen das es es die Beste Lösung wäre dadrin etwas zu ändern.

    Der Code an der entsprechenden Stelle sieht so aus

    #ifdef _UNICODE
    		typedef BOOL (WINAPI* PFNMOVEFILETRANSACTED)(LPCWSTR, LPCWSTR, LPPROGRESS_ROUTINE, LPVOID, DWORD, HANDLE);
    		PFNMOVEFILETRANSACTED pfMoveFileTransacted = (PFNMOVEFILETRANSACTED)GetProcAddress(hKernel32, L"MoveFileTransactedW");
    

    Wenn ich jetzt das L wegnehme ist der Compiler glücklich, aber ich nicht den es wird sich ja mal irgendwer Gedanken gemacht haben das da hin zu schreiben.

    Kennt von euch jemand das Problem?

    Schon einmal Vielen Dank im Voraus 🙂



  • Valyse schrieb:

    Ich habe mein Projekt in VisualStudio 2013 auf Zeichensatz Uniccode umgestellt.

    Wie?



  • Valyse schrieb:

    Der Code an der entsprechenden Stelle sieht so aus

    #ifdef _UNICODE
    		typedef BOOL (WINAPI* PFNMOVEFILETRANSACTED)(LPCWSTR, LPCWSTR, LPPROGRESS_ROUTINE, LPVOID, DWORD, HANDLE);
    		PFNMOVEFILETRANSACTED pfMoveFileTransacted = (PFNMOVEFILETRANSACTED)GetProcAddress(hKernel32, L"MoveFileTransactedW");
    

    Wenn ich jetzt das L wegnehme ist der Compiler glücklich, aber ich nicht den es wird sich ja mal irgendwer Gedanken gemacht haben das da hin zu schreiben.

    Kennt von euch jemand das Problem?

    Das Problem ist, dass der, der das da hingeschrieben hat, es nicht getestet hat.

    Ohne "L" ist korrekt.

    Normalerweise nicht, aber bei GetProcAddress schon. Die Exporte einer DLL sind halt einfach nur 8-Bit, also macht es auch keinen Sinn da einen Unicode String zu übergeben.
    Der der den Code geschrieben hat wusste das nicht - oder hat es schlicht in der Eile übersehen/nicht daran gedacht. Und wie gesagt nicht getestet, denn sonst würde es ja vermutlich nicht mehr falsch da stehen.



  • Danke hustbaer 🙂
    ich habs jetzt rausgenommen jetzt gibt es wenigstens andere Fehlermeldungen.
    Mich wundern nur immer noch das es ja scheinbar aus den mitgebrachten Dateien von VisualStudio, aber ok nobody is perfekt.

    Es fällt nicht zufällig noch jemandem ein welche Lib hier für noch dazu geschmissen werden muss oder. Da suche ich mich jetzt auch schon wieder stunden lang dran doof.

    Linkfehler 1
    error LNK2001: Nicht aufgelöstes externes Symbol ""int __stdcall AfxMessageBox(char const *,unsigned int,unsigned int)" (?AfxMessageBox@@YGHPBDII@Z)".

    Linkfehler 2
    error LNK2001: Nicht aufgelöstes externes Symbol ""wchar_t * __cdecl Piece(wchar_t const *,wchar_t *,int,char,int)" (?Piece@@YAPA_WPB_WPA_WHDH@Z)".

    Die bekomme ich so ca 25 jeweils für unterschiedliche Klassen. Im Original Projekt läuft das aber alles problemlos.


  • Mod

    Wen das Projekt Unicode ist, dann gibt es keine AfxMessageBox Funktion, die einen char annimmt.

    Wer hat die also definiert? In der MFC ist die nicht definiert und entsprechend ist der Linker Fehler korrekt.

    Naja. Und ide andere Funktion ist eben auch nicht da... was sol man da sagen?
    Die gehört zu Deinem Code.


Log in to reply