LabVIEWで生成されたDLLから関数を呼び出そうとしています。これは、実際よりもはるかに簡単になると思いました。機能は次のとおりです。
void __cdecl Device_Init(char DevName[]);
したがって、私のC#コードでは、次のことを試みています:
[DllImport(@"Device.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void Device_Init(StringBuilder name);
以下を使用するだけで、アプリケーションでこれを呼び出します。
StringBuilder devName = new StringBuilder(DeviceName);
Device_Init(devName);
デバイスで初期化を取得するのではなく、dll 内の別のメソッド (つまり、AF1_GetPressure.vi) に似たタイトルを持つ LabVIEW vi ウィンドウがポップアップ表示されます。その後、この LabVIEW ウィンドウがポップアップした状態でアプリケーションがハングし、デバッグ セッションを終了する必要があります。
私の質問は、関数の署名がどのように間違っている可能性があるかということだと思います...NIのWebサイトで、LabVIEWが配列内の文字数をより適切に確認するためにこの変数タイプを必要とすることを示しているように見える例を見つけたので、StringBuilderを使用しました。http://www.ni.com/example/31050/en/
パラメータタイプのあらゆる種類のさまざまな組み合わせを試しましたが、これを機能させることができないようです。C++ から dll を呼び出そうとすると、動作するようになります。奇妙なことに、アプリケーションで dll をロードしようとしたときに dll の初期化エラーが発生したため、C++ で dll を動的にロードする必要がありました。
どんな助けでも大歓迎です!