2011-07-19 9 views
0

他のプログラムdllを使用してカスタマイズすることができます。たとえば、コンピュータからir信号を送信できるusb uirtというデバイスがあります。シグナルを送信するために使用されるソフトウェアとデバイスからのドライバには、多くのDLLが付属しています。その結果、Visual Studioにインポートしようとしましたが、参照を作成できませんでした。おそらく彼らはおそらく私が思うような言語で書かれていたかもしれないからでしょう。しかし、誰かがそれらのライブラリのラッパーを手に入れることができました。そのDLLをインポートしたときにうまく動作し、C#からデバイスを制御できるようになりました。これは素晴らしいことです。ライブラリ用のラッパーを作成するC#

とにかく私はちょうどこれについて興味があったので、もっと学びたいと思っています...いつどのようにそれらのDLLを使うことができますか?どこの言語で作成したのですか?私はそれをグーグルで試してみたところ、次のようなものが見つかりました:

[DllImport("my.dll")] 
static extern void methodA(UInt32[] data); 

[]平均は何ですか?時々彼らはポインタを使用する...私の経験から、私はポインタを使う必要はなかった。私はいつも、私はポインタの必要性を見つけることができませんが、多分私は間違っている...私はこのすべてについての学習に興味を持って参照することによってまたは値によってプラス代表者の助けを借りて、C#で変数を渡すことができます。私はこれについて何を語るべきですか?

+1

開始を相互運用性やP /呼び出しを検索することによってします。http://のPInvoke。net/ –

答えて

2

あなたが探しているものはP/Invokeです。

[]はどういう意味ですか?

これは、関数呼び出しに属性を追加する方法です。これはDllImportAttributeです。

また、括弧のセットをUInt32[]にすると、これはUInt32のarrayであることを示します。

時には彼らは、ポインタを使用して...

C#unsafeコード内のポインタを作成することは可能であるが、P /呼び出しで使用するためにmarshallingと呼ばれる、より良いシステムがあります。 Marshallingを使用すると、管理されたC#コードとDLLのアンマネージコードの間で型を変換できます。そこには、メソッドの宣言に使用することができ、整数へのポインタを表すためのIntPtrクラスは、例えばですが、通常はごく普通の整数で通過すると、マーシャリングコードが自動的にあなたのためにそれを変換します。

私はそれらのDLLのを使用することができたときにどのように私が言うことができますか?どこの言語で作成したのですか?

特定のDLLが管理されているかどうかを確認する方法は不明ですが、特定のDLLが書き込まれた言語に関しては、それは無関係であり、コンパイル後に決定することは非常に困難です。

+1

私は、OPがUInt32 []の '[]'について話していると思っていました。 – MusiGenesis

+0

@MusiGenesis私の答えはちょうどその場合に拡張されましたが、誰かが属性について知っているだろうが、これらはデフォルトでほとんどすべての言語で存在します。 –

0

[DLLImport]は、クラス属性です。これはC#の標準的な部分です。ここで属性の詳細を読むことができます。Attributes (C# and Visual Basic)

は、それがUInt32オブジェクトの配列であることを示します。これはC#の標準的な部分です。あなたはここにC#で配列の詳細を読むことができます - Arrays (C# Programming Guide)