2009-06-12 9 views
2

私はdllImportを使用してCライブラリでCライブラリを使用しています。このライブラリのメソッドの1つは、データ型void *をパラメータとして使用します。私はvoid *にマッチするC#でデータ型IntPtrを使用できることを知りました。IntPtrパラメータを浮動小数点値で「塗りつぶす」方法

このIntPtrパラメータの値を設定する方法はわかりません。実際には、このパラメータにfloat値を設定したいと思います。どうすればいい?

ありがとうございました。 シモーネ

+0

浮動小数点値を値またはポインタで渡しますか?ですから 'void *'ではなく 'float'または 'float *'ですか? –

+0

質問には3通りの方法があります。あなたは正しい答えを得るために質問を明確にする必要があります。 3つの可能性は次のとおりです。(1)32ビット浮動小数点数とまったく同じビットを持つ32ビット整数を作るにはどうすればよいですか? (2)どのように私は浮動小数点数を含むいくつかの変数のアドレスを含むintptrを作るのですか?または(3)変数の与えられたアドレスを含むintptrを取得し、その変数の内容を指定のfloatで置き換えるにはどうしたらよいですか? –

答えて

2

あなたが危険なブロックを使用できる場合は、この1つが動作します。

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

それはフロートのバイナリ表現に等しいアドレスを含むのIntPtrを作成します。

パラメータをfloatとして宣言するだけでも可能です。それはとにかく32ビットです[32ビットC-DLL想定]。