Je suis très nouveau en C# (j'ai commencé à apprendre la semaine dernière).Utilisation de tableaux et de pointeurs en C# avec C DLL
J'ai une DLL personnalisée écrit en C avec la fonction suivante:
DLLIMPORT void test_function (double **test)
Ce que je cherche à faire est d'avoir un pointeur de C# pour le tableau « test ». Donc, si dans la fonction DLL, j'ai test [0] = 450,60, test [1] = 512,99 etc. Je veux pouvoir avoir cela disponible dans mon programme C#.
Dans le programme C# J'ai quelque chose de similaire à:
namespace TestUtil
{
public class Echo
{
public double[] results = new double[10];
public double[] results_cpy = new double[10];
[DllImport("test_dll.dll", CallingConvention = CallingConvention.Cdecl)]
static extern unsafe void test_function(ref double[] Result);
public unsafe void Tell()
{
results[0] = 0.0;
results[1] = 0.0;
results_cpy[0] = 0.0;
results_cpy[1] = 0.0;
test_function(ref results);
results_cpy[0] = (double)results[0] + (double)results[1] ;
}
}
}
Dans la fonction 'test_function' DLL J'utilise les éléments suivants:
*test[0] = 450.60;
*test[1] = 512.99;
Dans le tout DLL était OK (j'ai utilisé boîte de message dans la DLL pour vérifier les valeurs ont été appliquées). De retour dans le programme C#, les résultats [0] 'semblent très bien et je peux en tirer des valeurs, mais' results [1] 'me donne un index hors limites. Je le sais parce que si j'omets '+ (double) résultats [1]' je ne reçois aucune erreur. De plus, si je ne fais aucune tentative dans la DLL pour modifier 'test [1], elle conserve la valeur originale de C# (dans mon exemple 0.0).
De toute évidence, je ne fais pas quelque chose de bien, mais c'est le plus proche que j'ai pu obtenir pour que cela fonctionne. Tout ce que j'ai essayé échoue misérablement.
Toute aide serait grandement appréciée.
+1 pour éviter les risques. Il y a presque toujours un meilleur moyen. – Rap