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