C# struct défini comme:Comment faire passer ce tableau struct au code non managé?
[StructLayout(LayoutKind.Sequential)]
public struct RecognizeResult
{
/// float
public float similarity;
/// char*
[MarshalAs(UnmanagedType.LPStr)]
public string fileName;
}
c function signature:
void FaceRecognition(RecognizeResult *similarity); //where similarity is a pointer to an array
signature P/Invoke:
[DllImport(DllName, EntryPoint = "FaceRecognition")]
public static extern void Recognize(ref RecognizeResult similarity);
c'est comment j'appelle la fonction C++ en code managé:
RecognizeResult[] results = new RecognizeResult[100];
Recognize(ref results[0]); //through p/invoke
il se trouve le tableau ne peut pas être passé au code non managé, seul le premier élément est passé. comment dois-je faire pour passer un tableau au code non managé (est-ce même possible)?
BTW, Dois-je épingler la matrice lors de l'appel de code non géré afin que GC ne déplace pas la matrice?
Comment votre P/déclaration de fonction Invoke ressemble en C#? En particulier, comment mariez-vous l'argument? –
@Rudolph, je ne sais pas comment marshaler le tableau. – Benny