Problem mit managed und unmanaged Code



  • hi zusammen,

    ich habe ein c# projekt und versuche damit eine c++ dll anzusteuern.
    dazu habe ich einen wrapper gebaut. nun habe ich ein problem, das ich leider nicht in den griff bekomme:

    aus der mgdPipeElem klasse:

    mgdEndpoint* get_endpnt() {
    		Endpoint unmgdEndpnt;
    		int res = aPipeElem->get_endpnt(unmgdEndpnt);
    		mgdEndpoint* endpnt = new mgdEndpoint(&unmgdEndpnt);
    		return endpnt;
    	}
    

    kann ich das Endpoint Objekt wie im code angegeben mit & in ein zeiger umwandeln? oder macht das evtl schon probleme? wenn ich hier debugge ist endpnt richtig initialisiert...

    mgdEndpoint:

    public __gc class mgdEndpoint
    {
    private:
    	Endpoint* aEndpoint;
    public:
    ...
    	mgdEndpoint(Endpoint* _aEndpoint) {
    		aEndpoint = _aEndpoint;
    	}
    

    wenn ich jetzt in meiner c# klasse auf ein startpunkt zugreife...

    mgdEndpoint ep = aPipeElem.get_endpnt();
    

    ...wird ep nicht richtig instanziiert. wenn ich darauf eine funktion aufrufe und im debugger schaue, ist aEndpoint nicht richtig inizialisiert. also es steht nur blödsinn in den variablen.

    was läuft denn hier schief? wie krieg ich denn den pointer von ep bzw aEndpunkt geregelt!?



  • glaube ich hab den fehler schon herausgefunden.
    es liegt scheinbar echt an

    mgdEndpoint* endpnt = new mgdEndpoint(&unmgdEndpnt);
    

    wenn ich unmgdEndpnt als Endpoint* mit new erzeuge, dann gehts!
    bleibt also nur noch die frage, wie ich eine instanz von Endpoint richtig in einen zeiger umwandeln kann, ohne dass er verloren geht / probleme gibt...


Anmelden zum Antworten