Verwendung von arrays und Zeigern in C# mit C # - DLL

Ich bin sehr neu in C# (gerade angefangen zu lernen, in der vergangenen Woche).

Habe ich eine benutzerdefinierte DLL, die in C geschrieben mit folgender Funktion:

DLLIMPORT void test_function (double **test)

Was ich Suche zu tun haben, ist ein Zeiger von C# für das array 'test'.

So, wenn man in die Funktion in der DLL habe ich test[0] = 450.60, test[1] = 512.99 etc. Ich will im Stande sein zu haben, dass in meinem C# - Programm.

In der C# - Programm habe ich etwas ähnliches wie:

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] ;
    }
  }
}

In der DLL 'test_function' - Funktion, die ich verwendet die folgenden:

*test[0] = 450.60;
*test[1] = 512.99;

Innerhalb der DLL war alles OK (ich habe eine message-box, die innerhalb der DLL, um die Werte zu überprüfen, wurden angewandt). Zurück in der C# - Programm 'Ergebnisse[0]' scheint in Ordnung zu sein und ich kann Werte aus, aber die Ergebnisse[1]' gibt mir einen index out of bounds error. Ich weiß das, weil wenn ich das weglasse '+ (Doppel -) Ergebnisse[1]' ich keine Fehlermeldung. Auch, wenn ich nicht versuchen innerhalb der DLL zu ändern "test[1]" es bleibt der ursprüngliche Wert von C# (in meinem Beispiel 0.0).

Offensichtlich bin ich nicht etwas Recht, aber dies ist die nächste habe ich in der Lage zu bekommen, dass es überhaupt funktioniert. Alles andere habe ich versucht, scheitert kläglich.

Jegliche Hilfe würde sehr geschätzt werden.

InformationsquelleAutor | 2009-04-12

Schreibe einen Kommentar