2011-03-30 3 views
5

J'ai une DLL non managée avec une fonction qui prend un pointeur comme argument. Comment puis-je passer un pointeur de C# sans être «dangereux»?Comment puis-je passer un pointeur de C# à une DLL non managée?

Voici quelques exemples de code:

[DllImport(@"Bird.dll")] 
private static extern bool foo(ushort *comport); 

L'entrée correspondante dans l'en-tête:

BOOL DLLEXPORT foo(WORD *pwComport); 

Lorsque je tente et simplement déréférencer (&comport), je reçois une erreur disant: "Pointeurs et les tampons de taille fixe ne peuvent être utilisés que dans un contexte non sécurisé "

Comment puis-je contourner ce problème?

Répondre

13

Utilisation ref:

[DllImport(@"Bird.dll")] 
private static extern bool foo(ref ushort comport); 

appel comme si:

ushort comport; 
foo(ref comport); 

Pour Interop comme ça, je préfère utiliser UInt16 plutôt que ushort comme l'équivalent à WORD.

+0

Oh mec c'est simple! –

Questions connexes