Hallo überhaupt Ich versuche, Daten von meinem nicht verwalteten c-dll zurück zu bekommen. Die c-Funktion erwartet einen Zeiger auf eine Struktur, initialisiert die Struktur mit einem gewissen Wert und beendet sie. Der Fehler könnte irgendwo sein, sogar in der c-dll-Deklaration. (Ich mache das zum ersten Mal)C-Funktion mit Strukturzeiger als Parameter aufrufen
Hier sind die C-Code h-Datei:
#ifndef MYFUNCS_H
#define MYFUNCS_H
__declspec(dllexport) typedef struct t_Point{
int x;
int y;
} Point;
__declspec(dllexport) Point myFuncs();
__declspec(dllexport) int getPoint(Point* point);
#endif
c-Datei:
#include "stdafx.h"
#include "OpenCVTest.h"
int getPoint(Point* point){
point->x = 4;
point->y = 2;
return 0;
}
Der Wrapper in C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace CSharp_mit_OpenCV
{
[StructLayout(LayoutKind.Sequential)]
public struct Point
{
public int x;
public int y;
};
class Wrapper
{
[DllImport("OpenCV Test.dll", CharSet= CharSet.Auto)]
public static extern int getPoint(ref Point point);
}
}
Und die C# -Funktion, die diesen Wrapper verwendet:
Point p = new Point();
Wrapper.getPoint(ref p);
textBox1.Text = p.x.ToString();
textBox2.Text = p.y.ToString();
Mit diesem Code ich die folgenden Laufzeitfehlermeldung erhalten:
„Ein Aufruf von PInvoke Funktion 'CSharp mit OpenCV CSharp_mit_OpenCV.Wrapper :: GetPoint!' Hat den Stapel unausgewogen. Dies liegt wahrscheinlich daran, dass die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur übereinstimmt. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke Signatur das Ziel nicht verwalteten Signatur übereinstimmen.“
Was hier los? Bitte helfen Sie! Vielen Dank!