私は大学の化学科用に、力センサー、Z 軸ナノポジショナー ステージ、XYZ 軸ピコモーター ステージの 3 つの個別のデバイスを組み込んだプログラムを書いています。これら 3 つのデバイスを 1 つのプログラムに組み込み、相互に通信させる必要があります。力センサーとZ軸ステージの組み込みに成功しました。どちらも、C# 用に既製の DLL が付属しています。私は GUI プログラムを書いていて、C# にもかなり精通しているので、これは当然の選択でした。
ただし、XYZ ステージの DLL は C++ 用に作成されています。この DLL を自分のプログラムで動作させる方法がよくわかりません。互換性がなく、DLL 内の関数を公開する付属のヘッダー ファイルが C++ 用に作成されているため、Visual Studio で参照を追加できません。
プロセスの基本的な理解があります。ldcncom.h ヘッダーには、次のように記述された関数があります。
DLLENTRY(int) LdcnInit(char *portname, unsigned int baudrate);
C# プログラムで次のように書き直しました。
[DllImport("Ldcnlib.dll", EntryPoint = "LdcnInit")]
public static extern int LdcnInit(char[] portname, uint baudrate);
これが正しいかどうかはわかりませんが、DLL から関数を読み取ってその義務を実行できる限り、「機能しました」...他のすべての関数がまだ欠落しているため、完全には正しくありません。
しかし、私は残りをどうするかわかりません。たとえば、sio_util.h には、戻り値の型が HANDLE の関数と、戻り値の型が DWORD の関数がありますが、私はこれらに詳しくなく、C# で機能させる方法がわかりません。
相互運用、ラッパー、C++/CLI などについては聞いたことがありますが、現時点ではそれについては少し理解できません (これらすべてについてはまだ少し新しいことです)。
ありがとうございました。