1

そのため、ソフトウェアに機能を追加する作業を行っており、データを使用して C# から C++ に移動し、戻りデータを使用して C# に戻る必要があります。これを可能にするシステムは整っていますが、私のマシンだけに問題があるようです! を使用しております...

    [DllImport("user32.dll", CharSet=CharSet.Auto)]
    public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, ref COPYDATASTRUCT lParam);

メッセージを送信するメソッドには、次のものがあります...

        hWndRecipient = (hWndRecipient == IntPtr.Zero) ? new IntPtr(AbstractLegacyABELApplication.MainWindowHandle) : hWndRecipient;
        COPYDATASTRUCT dataToSend = new COPYDATASTRUCT();
        dataToSend.lpData = Marshal.StringToHGlobalAnsi(message);
        dataToSend.dwData = (int)messageType;
        dataToSend.cbData = GlobalSize(dataToSend.lpData);
        SendMessage(hWndRecipient, WM_COPYDATA, hWndSender.ToInt32(), ref dataToSend);
        Marshal.FreeHGlobal(dataToSend.lpData);

これにより、データが問題なく C++ レイヤーに取得されます。xml でメッセージを解析できるため、反対側で簡単に引き離すことができます。今、それを送り返そうとするとき、私は次のことをしています(C ++)...

        System::Runtime::InteropServices::Marshal::FreeHGlobal(pCopyDataStruct->lpData);                     
        CString csOutgoing("SOME SORT OF MESSAGE TO SEND BACK HERE");
        pCopyDataStruct->lpData = (PVOID)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(csOutgoing);
        pCopyDataStruct->cbData = csOutgoing.GetLength();

何らかの理由で、私のマシンだけで最初の行がクラッシュし、Visual Studio で破損したヒープ エラーが表示されます。このコード行をコメントアウトし、メモリ リークのリスクを無視して試してみると、C# に戻ったときに新しいメッセージが返されず、古いメッセージのままです。

私はこれらの変更を棚上げし、他の 2 人の開発者に渡しましたが、2 人とも問題なくビルドして実行することができました。

ソース管理から最新のものを取得し、デバッグ フォルダーを削除し、そこに DLL を再コピーし、クリーンアップし、ビルドしようとしましたが、何も変わっていないように見えますが、それでも同じ問題が発生します。

誰かが私に何らかの洞察を持っていて、本当にイライラしていて、検索が空になっています!

編集:私のマシンに何か問題があるようです。問題のプロジェクトをビルドして Visual Studio の外でコードを実行しようとすると、クラッシュしますが、同僚が同じシェルフ セットをビルドすると、Visual Studio の内外で実行できます。私は彼に変更のあるファイルのビルドを送ってもらいましたが、私のファイルはまだ彼のファイルでクラッシュしています...

EDIT2 : そのため、無限の試行、トラブルシューティングの後、解決策を見つけることができませんでした. 同僚のマシンで同じシェルフ セットを構築したところ、デバッグと EXE の実行の両方で問題なく実行できました。彼が自分のビルドを送ってきて、私のシステムで実行すると、クラッシュしてしまいます。これを顧客に提供することはできず、そのうちの 1 つでこの問題を危険にさらすことはできないため、別の回避策を見つける必要がありました。

4

0 に答える 0