Tengo una biblioteca de clase C# que contiene métodos que deben usarse con una aplicación externa. Lamentablemente, esta aplicación externa solo admite API externas en C/C++.Manera más simple de mover una matriz de C++ a C#, modificarla y pasarla a C++
Ahora he logrado obtener un ejemplo COM muy simple trabajando entre un dll C++ y un DLL C#, pero estoy atascado en cómo puedo mover los datos de la matriz.
Esto es lo que tengo hasta ahora, al igual que un pequeño ejemplo que encontré en la red de comunicación a través de 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();
}
Esto funciona bien para llamar al método add en mi clase C#. ¿Cómo puedo modificar esto para tomar y devolver una matriz de dobles? (También necesitaré hacerlo con cuerdas en la línea).
Necesito tomar una matriz no administrada, pasar esta matriz a una clase C# para algunos cálculos, y luego devolver los resultados a la referencia de matriz especificada en la llamada a función original (no administrada) C++.
Voy a tener que exponer una función como esta:
* calcin - referencia a la serie de dobles
* calcOut - referencia a la serie de dobles
numIN - valor de tamaño de matriz de entrada
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 think Puedo usar una DLL C++ \ CLI para la aplicación externa, así que si esto es más fácil que COM directo, entonces estaré dispuesto a ver eso.
Sea amable, ya que soy principalmente un desarrollador de C#, pero me han echado en la parte más profunda de Interop y C++.