vector von struct in C# einbinden



  • Hallo
    Habe folgendes C++ Programm unter VS2010 Express geschrieben:

    #include <vector>
    #include <iostream>
    
    using namespace std;
    
    struct myStruct
    {
    	int a;    
    	int b;
        int c;		
    };
    vector<myStruct> test;
    
    int main(void)
    {                                                                            
    	myStruct testStruct;
    
    	for(int i=0;i<=3;i++)
    	{
    		testStruct.a=i+10;
    		testStruct.b=i+100;
    		testStruct.c=i+200;
    		test.push_back(testStruct);
    	}
    
    	test.begin();
    
    	for(int i=0;i<=3;i++)
    	{
    		cout << test[i].a << endl;
    		cout << test[i].b << endl;
    		cout << test[i].c << endl;
    	}
    
    	cin.get();
    	return 0;
    }
    

    Mein Problem: In C# möchte ich die Werte (s. letzte for Schleife) auslesen können.
    Meine Frage und zwar, was ist der richtige Ansatz wenn ich dieses C++ Programm als DLL in C# einbinden möchte?



  • Ich versteh nicht ganz, warum dll!? Willst du dieses Programm einfach nur aus C# aus starten!?



  • dot schrieb:

    Ich versteh nicht ganz, warum dll!? Willst du dieses Programm einfach nur aus C# aus starten!?

    Ja genau und die Ausgabe soll in C# erfolgen.
    Irgendwie muss die Daten von C++ nach C# bekommen.



  • Beispiel um die Ausgabe einer Konsolenanwendung auszulesen ist unter "Hinweise":
    http://msdn.microsoft.com/de-de/library/system.diagnostics.process.standardoutput(v=VS.80).aspx
    (...wobei du noch was in StandardInput schreiben müsstest für cin.get()...)

    Als DLL: Bau halt ne C-Schnittstelle ein und nutze pinvoke.
    Alternativ: COM-Objekt raus bauen.

    ...wobei sich schon die Frage aufdrängt, warum du das bisschen nicht gleich in c# machst 😉



  • geeky schrieb:

    ...wobei sich schon die Frage aufdrängt, warum du das bisschen nicht gleich in c# machst 😉

    Ja das wollt ich auch grad fragen...



  • geeky schrieb:

    Beispiel um die Ausgabe einer Konsolenanwendung auszulesen ist unter "Hinweise":
    http://msdn.microsoft.com/de-de/library/system.diagnostics.process.standardoutput(v=VS.80).aspx
    (...wobei du noch was in StandardInput schreiben müsstest für cin.get()...)

    Als DLL: Bau halt ne C-Schnittstelle ein und nutze pinvoke.
    Alternativ: COM-Objekt raus bauen.

    Hallo
    Wie wäre denn der Ansatz für eine C- Schnittstelle bzw. für Pinvoke?
    Kennst du eine Seite oder Lehrbuch wo dies erklärt wird?

    geeky schrieb:

    ...wobei sich schon die Frage aufdrängt, warum du das bisschen nicht gleich in c# machst 😉

    Das soll nur ein Beispiel für mich werden wie man sowas machen kann.



  • Hallo,
    jemand eine Idee wie der Ansatz für eine C- Schnittstelle
    und Pinvoke sein könnte?



  • Du musst die von dir gewünschte Funktionalität in eine Funktion packen die die dll exportiert und die dann über P/Invoke aus C# aufrufen!?
    Wie stellst du dir das sonst vor? Soll C# merken dass du da eigentlich ein eigenständiges Programm hast, es irgendwie ausführen und dann aus dem Output schließen dass du vermutlich gern diese und jene Werte hättest!?


Anmelden zum Antworten