Ich habe eine C# -Klassenbibliothek, die Methoden enthält, die mit einer externen Anwendung verwendet werden müssen. Leider unterstützt diese externe Anwendung nur externe APIs in C/C++.Einfachste Möglichkeit, ein Array von C++ nach C# zu verschieben, zu modifizieren und an C++ zurückzugeben
Jetzt habe ich es geschafft, ein sehr einfaches COM-Beispiel zu bekommen, das zwischen einer C++ - DLL und einer C# -DLL funktioniert, aber ich stehe fest, wie ich Array-Daten bewegen kann. Diese
ist, was ich so weit gekommen, wie ein kleines Beispiel, das ich auf dem Netz der Kommunikation über COM gefunden:
DLL_EXPORT(void) runAddTest(int add1,long *result) {
// Initialize COM.
HRESULT hr = CoInitialize(NULL);
// Create the interface pointer.
IUnitModelPtr pIUnit(__uuidof(UnitModel));
long lResult = 0;
// Call the Add method.
pIUnit->Add(5, 10, &lResult);
*result = lResult;
// Uninitialize COM.
CoUninitialize();
}
Dies funktioniert die Add-Methode in meiner C# Klasse zu nennen. Wie kann ich dies ändern, um ein Double-Array aufzunehmen und zurückzugeben? (Es muss auch mit Strings auf der ganzen Linie gemacht werden).
Ich muss ein nicht verwaltetes Array nehmen, dieses Array an eine C# -Klasse für einige Berechnungen übergeben und dann die Ergebnisse an den Array-Verweis übergeben, der im ursprünglichen Funktionsaufruf (nicht verwaltet) C++ angegeben wurde.
Ich werde eine Funktion wie folgt aussetzen müssen:
* calcin - Verweis auf Array von Doppel
* calcOut - Verweis auf Array von Doppel
NumIn - Wert Größe des Eingangsfeldes
DLL_EXPORT(void) doCalc(double *calcIn, int numIn, double *calcOut)
{
//pass the calcIn array to C# class for the calcuations
//get the values back from my C# class
//put the values from the C# class
//into the array ref specified by the *calcOut reference
}
I denke, Ich kann eine C++ \ CLI-DLL für die externe Anwendung verwenden, wenn dies einfacher als gerade COM ist dann werde ich bereit sein, darauf zu schauen.
Bitte seien Sie vorsichtig, da ich in erster Linie ein C# -Entwickler bin, aber in das tiefe Ende von Interop und C++ geworfen wurde.