C# でアンマネージ DLL を使用するコントローラーと通信する必要があります。ドキュメントは DLL にはあまり役に立たず、私は DLL と対話した経験がありません。同社は、VB から DLL をラップするクラスを含むサンプル VB プロジェクトを提供しています。このクラスは ctccom32v2 と呼ばれます。
アンマネージ DLL を呼び出すという汚い作業は、構造体やその他の変数を含めて既に行われているため、そのクラスを使用して VB クラス ライブラリを作成できると考えました。時間と労力を大幅に節約できると思います。そこで、そのクラス ソース ファイルを VB クラス ライブラリ プロジェクトに追加すると、ビルド時に dll が吐き出されました。次に、その dll を C# プロジェクトの参照に追加すると、参照ブラウザーで関数を確認できます。私が作成したライブラリの名前は CTC_Lib です。
(なぜ私が自分のプログラムを VB で記述せず、そのクラスを使用しないのか疑問に思われている場合は、C# での作業を好み、より快適に作業できます)
私が直面している問題は次のとおりです。次を使用してライブラリのインスタンスを作成すると
CTC_Lib.Ctccom32v2 ctc = new CTC_Lib.Ctccom32v2();
次に ctc.somefunction と入力しようとすると、intellisense は Equals、GetHashCode などのいくつかの既定のメソッドを表示します。アンマネージ DLL を公開する Ctccom32v2 関数は見当たりません。
ライブラリとクラス名を次のように手動で入力すると:
CTC_Lib.Ctccom32v2.
Ctccom32v2 のすべての関数を含む IntelliSense リストがポップアップ表示されます。
別のクラスを VB クラス ライブラリ (「somelib」と呼びましょう) に追加し、それに単純な関数を貼り付けると、次のようになります。
Public Function add() as Void
Return 1+2;
End Function
次に、同じ方法でインスタンスを作成します。
CTC_Lib.somelib ctc = new CTC_Lib.somelib();
ctc と入力するだけで、関数 "add" が IntelliSense ウィンドウに表示されるようになりました。
関数が VB クラスで宣言される方法が原因でしょうか? これは VB クラスの多くの関数の 1 つです。それらはすべて「Declare Auto Function」を使用して同じように宣言されています。
Declare Auto Function CtOpenConnection Lib "Ctccom32v2.dll" _
(ByVal ConnectID As Integer, ByVal CommPort As Integer, ByVal Address As Integer) As Integer
Auto 関数の意味はわかりませんが、関数が存在するクラスのインスタンスを作成しようとすると、関数が公開されません。
これが VB クラス ライブラリ内でこれらの関数を呼び出す適切な方法である場合、またはそうでない場合は、私に知らせてください。私は初心者です。また、用語の一部が間違っている場合はご容赦ください。私はプログラミングの専門用語が (まだ) 得意ではありません。