2016-03-23 10 views
0

Ich sortiere eine native C++ - DLL zu einer C# -DLL. Ich bin in C/C++ nicht sehr anerkannt, aber es ist mir gelungen, es zum Laufen zu bringen, bis ich an diesem Problem festhalte. Hier ist ein sehr einfaches Codebeispiel:C# P/Invoke: nativer Ausgabeparameterwert erreicht den verwalteten Code nicht

C++

PROASADLL __declspec(dllexport) void outTest(int* number){ 
    int temp = *number + 10; 
    number = &temp; //*number = 12 
} 

C#

[DllImport("ProAsaNativeDll.dll", CallingConvention = CallingConvention.Cdecl)] 
private static extern void outTest(ref int number); 

public static int OutTest() 
{ 
    int number = 2; 
    outTest(ref number); 
    return number; //number = 2 
} 

Bitte beachten Sie, dass ich mein wirkliches Szenario bin, ich versuche, dies mit einem Zeiger zur Arbeit zu kommen, um Zeiger auf struct, aber ich entschied mich, es wegzulassen, da es kein Marshalling-Problem ist; nicht einmal dieser einfache Code wird funktionieren. Der C++ - Code funktioniert, aber ich würde nicht ausschließen, dumm zu sein und ein Problem dort zu haben: wie ich sagte, ich weiß nicht viel C/C++.

Der Zahlenvariablenwert in der C# -Wrappermethode wird nicht geändert. Bitte helfen Sie.

+2

Es ist schlechter C++ - Code. Das wird nie besser, wenn du es ansteckst. Lass es zuerst von einem C++ Testprogramm funktionieren. –

Antwort

2

Ich denke, Sie bekommen ein schlechtes Ergebnis, weil Sie in Ihrem C++ Code den Parameter number ändern, indem Sie ihn auf einen anderen Zeiger setzen.

Ich glaube, dass Ihre Änderung nur in Ihrer Funktion outTest 's Bereich sichtbar ist.

Wenn Sie jedoch den Wert ändern, wo der Zeiger ... zeigt ... sollte das eine andere Geschichte sein. Ziemlich genau so:

*number = *number + 10; 

EDIT: Dieses Bit ist nicht getestet. Oh ... und auch ... Ich habe seit Ewigkeiten nichts mehr in C++ geschrieben. Könnte auch völlig falsch sein.

+0

Wie Fahrrad fahren – Jacobr365

+1

@ Jacobr365 Yeah ... Alles ist gut und ordentlich ... Bis Sie fallen und "beugen" Sie Ihre Nase :) –

+0

Nice! Wie gesagt, C++ ist nicht meine Stärke, aber ich sehe sowohl "Was hast du dort gemacht" als auch wo ich falsch lag. Danke vielmals! – makoshichi

Verwandte Themen