Je veux simplement appeler une fonction C d'une DLL en C#. Cette fonction C renvoie une structure.invoquer la fonction C avec struct comme valeur de retour dans C#
Voici la déclaration .h fichier de dll c:
typedef struct t_Point{
int x;
int y;
} Point;
Point myFuncs();
Maintenant, je veux utiliser cette fonction en C#. Wrapper.cs:
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)]
[return: MarshalAs(UnmanagedType.Struct)]
public static extern Point myFuncs();
}
}
L'utilisation est la suivante:
Point p = Wrapper.myFuncs();
(Naming est probablement pas le meilleur)
myFuncs déclare seulement struct, met des valeurs à x et y et le renvoie. Le problème: Les valeurs que je reçois en C# sont différentes de celles générées dans la fonction C. Il devrait être 4 et 2 et il est 0 et 111226272. Quel est le problème ici?
Merci pour toute aide!
Dites que c'est quelque chose avec des différences dans les types: essayez C# 'short' au lieu de' int', et essayez avec 'uint' ou' ushort'. Pouvez-vous poster les octets qui sont sortis par le processus (ainsi avant que C# essaye de créer une structure d'eux)? –
Est-ce qu'il retourne toujours 111226272 ou est-ce que le numéro diffère à chaque fois? –
N'oubliez pas de vous assurer que la convention d'appel est correcte (cdecl/fast-call, etc). Voir ici: http://msdn.microsoft.com/fr-fr/library/system.runtime.interopservices.callingconvention.aspx – plinth