C++ Funktion Rückgabe 2d Char Array



  • Hallo Zusammen,

    ich versuche seit jetzt zwei Tagen ein Funktion zu schreiben, die ein 2D Char Array zurückgibt. Es werden zwar kein Fehler angezeigt, aber das Programm wird nicht ausgeführt.

    //Funktion
    char** test1(char* bar)
      {
    	char *result[]={"1","2","3"};
    	return result;
    	// return SysAllocStringByteLen(result.c_str(),4);
      }
    ...
    aufruf
    char* test= "abc";
    char* tes[]=test1(test);
    

    Was mache ich hier falsch 😕



  • Wenn das dein vollständiger Quellcode ist, dann machst du alles falsch.



  • Hallo,

    für die Funktion ist es mein vollständiger Code. Mein Ziel ist es ein Funktion zu schreiben, die ein eigentlich ein 3d Array zurück gibt.



  • Benutze std::vector und std::string:

    //Funktion
    std::vector<string> test1()
      {
        std::vector<string> result={"1","2","3"};
        return result;
      }
    ...
    aufruf
    std::vector<string> tes=test1();
    


  • Hallo,

    danke hat funktioniert. Mein Problem ist ich möchte den Array über ein Dll zurückgeben

    DLL vector<char*> _stdcall test1(char* bar)
      {
    	std::vector<char*> result;
    	result.push_back ("a");
    	result.push_back ("d");
    	//char* result[]={"1","2","3"};
    	return result;
    	// return SysAllocStringByteLen(result.c_str(),4);
      }
    

    Das funktioniert aber leider nicht



  • borhan schrieb:

    Das funktioniert aber leider nicht

    "Funktioniert nicht" ist keine Problembeschreibung.

    Es hatte schon seinen Grund, dass ich std::string und nicht char* vrogeschlagen habe.



  • DLL std::vector<string>  _stdcall test1(char* bar)
      {
    	std::vector<string> result;
    	result.push_back ("as");
    	result.push_back ("das");
        return result;
    	// return SysAllocStringByteLen(result.c_str(),4);
      }
    

    Wenn ich es mit string machen, funktioniert es auch nicht Fehlermedlung ist:

    error C2562: 'test1': 'void'-Funktion gibt einen Wert zurück
    

    Ich habe deswegen anstelle von string char* benutzt weil ich die Dll in VB aufrufen möchte und in VB können c++ strings nicht bearbeitet werden



  • Die API Schnittstellen sollte man immer in C halten, um die Kompatibilität zu gewährleisten!

    Du musst vermutlich mit new arbeiten und am besten ein 1D Array zurückgeben.



  • borhan schrieb:

    Wenn ich es mit string machen, funktioniert es auch nicht Fehlermedlung ist:

    error C2562: 'test1': 'void'-Funktion gibt einen Wert zurück
    

    Was auch immer du da gemacht hast, auch vector<char*> ist nicht void.

    borhan schrieb:

    Ich habe deswegen anstelle von string char* benutzt weil ich die Dll in VB aufrufen möchte und in VB können c++ strings nicht bearbeitet werden

    Aber vector? Das würde mich ja jetzt wundern.



  • ja, vector. ich weiss auch wieso diese Fehlermeldung kommt.

    Wenn ich die Funktion aus c++ aufrufe dann funktioniert die Fehlerfrei. Wenn ich es als DLL kombinieren möchte funktioniert es dann nicht und kommt dann diese komisch Fehlermeldung


Anmelden zum Antworten