Re: C++ und D - übergabe von Array



  • Hi zusammen,
    hat von euch auch schon einmal in D programmiert?
    Ich weiss dass ich hierfür im falschen Forum bin, aber bisher konnte man mir nicht weiterhelfen. Vieleicht kennt der eine oder andere ja D bzw. kann meine Frage einfach so beantworten.

    Bin gerade dabei ein C++ Programm von mir in ein D Programm einzubinden.
    Das ganze realisiere ich mit einem Wrapper.

    Das klappt bisher alles, ich stosse jedoch auf ein Problem:
    Eine Methode meines C++ Programms gibt einen std::vector<double> zurück.
    Diesen Rückgabevector muss ich nun irgendwie in einen Datentyp in D umwandeln.

    Ich habe in meiner C++ Methode aus dem std::vector schon einen double[] erzeugt, da ich dachte diesen übergeben zu können, komme hier aber nicht mehr weiter.

    Mein C++ Code - Wrapper.cpp:

    // TODO: convert from C++ array to D Array
    int getSignalcluster(int val) {
       if(val >= getNumberOfSignalclusters(val)){
          std::cerr<< "Wrapper.cpp: void getSignalcluster(int val) - val is greater than size of"
                "Clusterlist" << std::endl;
          throw "Exception";
       }
            // unwichtig, hier hole ich mir einfach nur den vector
       std::vector<int> actualSignals = (*pri_ptr).getSignalcluster(val);
    
       int actualSignals_ary[actualSignals.size()];
    
       for(int i = 0; i < actualSignals.size(); i++){
          actualSignals_ary[i] = actualSignals[i];
       }
    
       ////--> diesen möchte ich zurück geben: actualSignals_ary;
       return ???;
    }
    

    Meine main.d:

    module main;
        import std.stdio;
        // returns the id's of the signals from cluster
            extern (C++) int getSignalcluster(int);
    
        int main()
            {
             ...            
    
           getSignalcluster(i);                     
    
                  return 0 ;
            }
    


  • Schreib das besser nach "Rund um die Programmierung", da laufen ab und an einmal ein paar D-Spinner herum.



  • Vielleicht mal hier gucken.
    Oder Du schreibst ein C-Interface-Wrapper (meist ist das besser) und guckst dann hier.


Anmelden zum Antworten