std::wstring problem oder auch C3385



  • hallo

    ich hab folgendes problem:
    wenn ich per dllimport eine unmanaged c++ dll einbinde

    [DllImport("m3_globalsd.dll", EntryPoint = "?GetM3ProgramRootDirectory@M3_OPT_DirectoryOptions@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@XZ", CharSet=CharSet::Unicode)]
    	extern std::wstring GetM3ProgramRootDirectory();
    

    dann mault er mir an dem "std::wsting" rum

    Error 1 error C3385: 'M3_VersionLinks_managed::GetM3ProgramRootDirectory' : a function that has a DllImport custom attribute cannot return an instance of a class Main.cpp 24

    ich hab keine ahnung was ich tun muss oder sollte.
    vll kann mir jm einen stupps in die richtige richtung geben
    Gruß KY



  • Hallo,

    So wie ich das sehe (ohne das genau überprüft zu haben) geht das so nicht.
    Der std::wstring ist für den managed Teil unbekannt.
    Was Du erreichen möchtest (glaube ich), ist ein marshalling von std::wstring nach System::String. Das funktioniert aber nicht direkt, sondern über char, bzw. wchar_t.

    Da Du ja in C++/CLI entwickelst kannst Du ja die Methode GetM3ProgramRootDirectory so umschreiben, dass eben ein System::String zurückgegeben wird. Das eigentlich Marshalling wird dann in dieser Funktion durchegführt.

    Vielleicht hilft Dir das weiter...

    Darf ich fragen, warum Du ausgerechnet mit C++/CLI programmierst?
    (Wenn Du nämlich sowiso P/Invoke als Interp. Möglichkeit benützt, könntest Du auch C# oder VB.NET verwenden. Das würde es ev. ein wenig einfacher / verständlicher machen.)

    Simon



  • c++/cli hat sich einfach angeboten.
    des problem ist, dass ich die dll nicht einfach ändern kann, da diese von einigen anderen großen programmteilen, die nicht in c++/cli geschreiben sind verwendet wird, die ich nicht änder kann. kann ich diese funktion dann irgendwie in meinem code umbiegen oder hab ich da gar keine changse?
    Gruß KY



  • Du musst einfach das mit dem "DllImport" weglassen und die Include-Datei einbinden!



  • ok des problem ist da sind CString und solche faxen drin an denen der compiler rummault 😞


Anmelden zum Antworten