hae, bin ich bloed ?



  • _tcsncpy_s(fm.szFaceName, strFontName.data(), LF_FACESIZE);
    

    in der einen klasse - no errors or warnings

    _tcsncpy_s(ti.lpszText, strTip.c_str(), strTip.length());
    

    in einer anderen klasse - "error C2660: 'wcsncpy_s' : function does not take 3 arguments"
    sei es unicode oder multibyte compilation

    was soll der bloedsinn ?
    _tcsncpy_s nimmt drei argumente an und bekommt auch drei - beide klassen werden compiliert, bei dem einen keine fehler bei den anderen schon

    hae



  • data() gibt imho was anderes zurück als c_str().



  • Was für einen Typ hat denn 'strTip'? Wenn du für UNICODE Compilerst, benötigst du einen wstring.

    @phlox: inhaltlich gibt es einen Unterschied, aber technisch liefern beide Methoden einen const char* 😉



  • in beiden faellen ist der source string ein "DString" welches ein define ist zwischen std::string und std::wstring
    data() und c_str() sind das selbe, war durch rumprobieren nur irtendwie auf das c_str gelandet

    hab das nun so geloest:

    TCHAR *str = new TCHAR[strTip.length()+1];
    SecureZeroMemory(str, strTip.length()+1);
    _tcsncpy_s(str, strTip.length()+1, strTip.c_str(), strTip.length());
    ti.lpszText = str;
    

    trotzdem finde ich das sehr merkwuerdig



  • data() und c_str() sind nicht das Gleiche. c_str() ist auf jedem Fall Nullterminiert, data() nicht unbedingt.



  • es geht aber sowohl als auch nicht - bei beiden schluckts der compiler nicht /=

    btw
    fm = CHARFORMAT2
    ti = TOOLINFO


Anmelden zum Antworten