2009-06-12 5 views
2

J'utilise dllImport pour utiliser une bibliothèque C dans C# .NET. L'une des méthodes de cette bibliothèque utilise le type de données void * en tant que paramètre. J'ai découvert que je peux utiliser le type de données IntPtr en C# correspondant au void *.Comment "remplir" un paramètre IntPtr avec une valeur flottante?

Maintenant, je ne sais tout simplement pas comment définir la valeur de ce paramètre IntPtr. En fait, je veux mettre une valeur flottante dans ce paramètre. Comment ferais-je cela?

Merci d'avance pour toute idée. Simone

+0

Voulez-vous qu'une valeur flottante soit transmise par valeur ou par pointeur? Donc 'float' ou 'float *' au lieu de 'void *'? –

+0

Votre question peut être prise de trois manières différentes. Vous devez clarifier la question pour obtenir la bonne réponse. Les trois possibilités sont: (1) Comment faire un intptr 32 bits qui a exactement les mêmes bits qu'un flottant 32 bits? (2) comment puis-je faire un intptr qui contient l'adresse d'une variable que j'ai qui contient un float? Ou (3) comment puis-je prendre un intptr qui contient une adresse donnée d'une variable, et remplacer le contenu de cette variable par le flottant donné? –

Répondre

2

Si vous pouvez utiliser des blocs dangereux, celui-ci fonctionne:

static IntPtr IntPtrFromFloat(float f) 
{ 
    unsafe 
    { 
     return (*(IntPtr*)&f); 
    } 
} 

Il crée un IntPtr contenant une adresse égale à la représentation binaire du flotteur.

Il devrait également être possible de simplement déclarer le paramètre comme flottant. Il s'agit de 32 bits de toute façon [C-DLL 32 bits supposé].

Questions connexes