Ho una libreria di classi C# che contiene metodi che devono essere utilizzati con un'applicazione esterna. Sfortunatamente questa applicazione esterna supporta solo API esterne in C/C++.Il modo più semplice per spostare un array da C++ a C#, modificarlo e passarlo a C++
Ora sono riuscito a ottenere un esempio COM molto semplice che funziona tra una DLL C++ e una DLL C#, ma sono bloccato su come posso spostare i dati dell'array.
Questo è quello che ho finora, proprio come un piccolo esempio che ho trovato sul web di comunicare tramite COM:
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();
}
Questo funziona bene per chiamare il metodo Add della mia classe C#. Come posso modificare questo per prendere e restituire una serie di doppi? (Devo anche farlo con le corde lungo la linea).
Ho bisogno di prendere un array non gestito, passare questo array a una classe C# per alcuni calcoli, e quindi passarlo indietro ai risultati dell'array specificato nella chiamata di funzione originale (non gestita) C++.
avrò bisogno di esporre una funzione come questa:
* calcin - riferimento alla serie di doppie
* calcOut - riferimento alla serie di doppie
numIN - valore di dimensione della matrice di ingresso
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 penso Posso usare una DLL C++ \ CLI per l'applicazione esterna, quindi se questo è più semplice di COM dritto, allora sarò disposto a dare un'occhiata.
Si prega di essere gentile come io sono principalmente uno sviluppatore C# ma sono stati gettati nella parte profonda di Interop e C++.