Problem mit Marshal-String



  • Hallo Leute, ich bin rel verzweifelt, weil elementare Dinge nicht klappen wie System::String zu std::string zu convertieren.

    Folgendes: beim googeln bin ich auf diese funktion gestoßen um Strings zu strings zu convertieren.

    void MarshalString ( String ^ s, string& os ) {
       using namespace Runtime::InteropServices;
       const char* chars = 
          (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
       os = chars;
       Marshal::FreeHGlobal(IntPtr((void*)chars));
    }
    
    void MarshalString ( String ^ s, wstring& os ) {
       using namespace Runtime::InteropServices;
       const wchar_t* chars = 
          (const wchar_t*)(Marshal::StringToHGlobalUni(s)).ToPointer();
       os = chars;
       Marshal::FreeHGlobal(IntPtr((void*)chars));
    

    Mein Programm hat 2 Formen (ich arbite mit Visual c++). Wenn ich die Funktionen in Form1 deklariere funktionieren die Funktionsaufrufe und ich kann convertieren.

    etwa in der Art:

    #include <iostream>
    #include <stdio.h>
    #include <string>
    #include "Form2.h"
    using namespace std;
    
    void MarshalString ( String ^ s, string& os ) {
       using namespace Runtime::InteropServices;
       const char* chars = 
          (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
       os = chars;
       Marshal::FreeHGlobal(IntPtr((void*)chars));
    }
    

    Wenn ich aber versuche genau das gleiche in Form2 zu machen kommen Fehler:

    1>Form2.obj : error LNK2005: "void __clrcall MarshalString(class System::String ^,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)" (?MarshalString@@$$FYMXPAAVString@System@@AAV?AAVString@System@@AAV?basic_string@DU?chartraits@D@std@@V?char_traits@D@std@@V?allocator@D@2@@std@@@Z) already defined in Test.obj
    1>C:\Users\tammi\Documents\Visual Studio 2008\Projects\Test\Debug\Test.exe : fatal error LNK1169: one or more multiply defined symbols found

    was mach ich damit? Es ist schon in Test.obj definiert...
    Aus Form1 hab ich die Deklaration dabei natürlich gelöscht.

    Ich vermute der Fehler ist recht simpel, aber ich hab keine lösung nach zigfachen compelieren und rumprobieren gefunden.

    Vielleicht kann mir jmd helfen



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ (auch C++0x) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Du musst die Implementierung in einer cpp-Datei machen, nicht in der h-Datei; oder Du kopierst den Code und machst ihn bestantteil Deines Forms (also als Member-Funktion), dann kannst Du es auch in der From*.h Datei lassen.


Anmelden zum Antworten