Seite 1 von 1

(gelöst) C++ CLI => C#

Verfasst: 06.10.2016, 10:09
von joggel
Hallo,

mal wieder stehe ich hier von einem kleinen Problem.
Ich habe eine C++-Bibliothek. Diese möchte ich nach C# portieren.
Ich wrappe diese C++-Klasse also in eine C++ CLI Klasse.

Ich poste hier einfach mal etwas Code, weil es mehr sagt als 1000 Worte.

Code: Alles auswählen

void MYWrapper::getItemNames(array<String^>^ strings)
{
	CAtlArray<CString> itemNames;
	mImpl->getItemNames(itemNames);

	strings = gcnew array<String^>(itemNames.GetCount());
	for (int index = 0; index < itemNames.GetCount(); ++index)
	{
		String^ str = gcnew String(itemNames.GetAt(index));
		strings[index] = str;
	}
}
Ich möchte diese getItemNames gerne in C# aufrufen, quasi so:

Code: Alles auswählen

            string[] strings = new string[10];
            wrapper.getItemNames(strings);
Leider ist jeder string in strings leer.
Wenn ich jedoch debugge, dann wird auf C++ CLI Seite das array schon korrekt befüllt, es kommt nur nix auf C#-Seite an *<:-/
Weiß da jemand was?

Re: C++ CLI => C#

Verfasst: 06.10.2016, 10:35
von xq
Dein Code ist das C#-Äquivalent zu:

Code: Alles auswählen

void MYWrapper.getItemNames(string[] strings)
{
        CAtlArray<CString> itemNames;
        mImpl->getItemNames(itemNames);

        // Argument wird überschrieben:
        strings = new string[itemNames.GetCount()];
        for (int index = 0; index < itemNames.GetCount(); ++index)
        {
                var str = new string(itemNames.GetAt(index));
                strings[index] = str;
        }
}
Einfach in C++ das mit gcnew erzeugte array zurückliefern und jut:

Code: Alles auswählen

array<String^>^ MYWrapper::getItemNames()
{
        CAtlArray<CString> itemNames;
        mImpl->getItemNames(itemNames);

        auto strings = gcnew array<String^>(itemNames.GetCount());
        for (int index = 0; index < itemNames.GetCount(); ++index)
        {
                String^ str = gcnew String(itemNames.GetAt(index));
                strings[index] = str;
        }
        return strings;
}

Re: C++ CLI => C#

Verfasst: 06.10.2016, 10:41
von joggel
Wunderbar. Funktioniert (y)
Danke :)