0

そのため、外部のスクリプト言語を使用せずに、実行時にアプリケーションの動作を変更できるようにしたいと考えています。それを達成するために、DLLを使用してみました。私は次のようなものを持っています:

begin program;
load dll and function pointers;
init_func_ptr();
loop:
    if(compiled_new_version)
    {
        pause threads;
        unload dll;
        overwrite expired dll with new dll;
        load dll and function pointers;
        resume threads;
    }
    update_func_ptr(state);

最初は何の問題もありませんでした。しかし、実際のコードを書いたら、dll をリロードした後にクラッシュし始めました。手動でエクスポート/リロードしている関数ポインターのみが「init」と「update」です。

私が抱えているクラッシュに関するいくつかの情報。どこにもクラッシュしていません。コールスタックにアドレス「0xCDCDCDCD」のエントリがたくさんあります (これは、Visual Studio をデバッガとして使用していて、アプリケーションがデバッグ モードでコンパイルされている場合に発生することに注意してください)。

私が信じているのは、スレッドを一時停止すると、そのうちの 1 つ以上が期限切れの dll 内で何らかのコードを実行しているため、その dll をアンロードしてスレッドを再開すると、クラッシュが発生するということです。

どうすればこの問題を解決できますか?

4

1 に答える 1