0

基本的に、C# から lua (スクリプト用のネイティブ dll) を使用しています。チュートリアルに従って、正しい呼び出し規約を使用して lua dll を再コンパイルし、必要な関数をインポートしました。

呼び出すたびにプログラムをクラッシュさせる特定の関数があります。ネイティブ環境 (以前に別の API 呼び出しでそこに置いたもの) から文字列を取得し、それをマネージド文字列として再度返します。

私は 3 つの別々の .net プロジェクトを持っています。1 つ目のプロジェクトは、すべてのネイティブ コールを適切に .net dll にラップする共有プロジェクトです。他の 2 つは共有プロジェクトを使用します。1 つは Windows.Forms を使用する GUI アプリケーションで、もう 1 つはコンソール アプリケーションです。

コンソール アプリケーションからはすべて正常に動作しますが、GUI プロジェクトから言及したその関数を呼び出すたびに、例外やエラーなしですぐにクラッシュします。デバッグ中にウォッチ ペインから関数を呼び出そうとしましたが、「関数の評価が中止されました」と表示され、数秒後にデバッガが終了しました。

GUI プログラムとコンソール プログラムから呼び出す方法に違いはないことを 100% 確信しています。私は主にWindows 7 64ビットで開発していることに言及する必要がありますが、Windows XP 32ビットであるラップトップでデバッグすると、GUIプログラムが不思議なことに機能しました。

この問題は、マーシャリング (確かに私はほとんど知らない) または私が気付いていないその他の詳細に関係していると思われます。ネイティブ環境にプッシュする前に、文字列を UnmanagedType.LPStr としてマーシャリングします。

私は包括的な答えなどを探しているわけではありません (ただし、答えがある場合は、ぜひ聞いてください)。このようなものを修正する方法について、少し方向性を探しています。

4

1 に答える 1

2

Console および WinForms プロジェクトのプラットフォーム ターゲット プロジェクトの設定を確認します。そのうちの1つには「x86」があり、もう1つは「任意のCPU」にあると確信しています。

于 2012-12-05T21:36:56.703 に答える