前提
一般公開されているソフト(OnStation)を自分のPC環境で使いたいです。
以前は上記のサイトから英語版がDLでき、インストールと実行できましたが、さっき自分のPCでやったところできませんでした。(なぜだ…)
洞窟測量時使用する外国のソフトがあるのですが、なぜか私のPC環境でのみ実行できません。
そこで、GitHubからプルしてVisualStudio2022でデバッグしたところ成功。
しかし、exeファイルを実行すると、ウィンドウは表示されるが、ウィンドウ上でスクロールすると、マウスカーソルの横に砂時計が3回ほど表示され、アプリが終了します。
これは通常どおりDLした時と同じ挙動であり、もうひと手間必要です。
ここからは、このソフトについて詳しく書きます。
このソフトを私はずっと使っていて、Windows Vista,7,10,11のノートPCで正常に動作することを確認しています。
私が今使っているのは、自作PCに自分でWin10をダウンロードしたものです。(他のWin10PCでは動いてるが私のPCだけ動かない)
なので、このソフト以外は正常に使えていますが、何か必要なソフトがDLされていないのかなとも思ったりもしています。
(動作確認したWin11はVirtualBox上の仮想PCです)
このソフトは知り合いの間だけで、一部日本語化されたものが出回っており、HPからDLできるものも日本語化されたものもどちらも共通して、regsvr32.exe
をコマンドプロンプトで実行する必要があります。
この操作をしなかったら、このようなポップアップが出ます。
確かこの画像がそうだっと思う。
OnStation.exeがあるディレクトリに以下のファイルがある状態にします。(私はそれぞれのファイルがなぜ必要かは知りません)
・GLU32.DLL
・grid32.ocx
・OPENGL32.DLL
・pdate32.ocx
・Uninst.isu
つぎに、管理者でコマンドプロンプトを開き、以下のコードを入れます。
regsvr32.exe "C:\Program Files\OnStation\grid32.ocx" "C:\Program Files\OnStation\pdate32.ocx"
として、Enterを押し、ocxを登録します。
こうすると、それぞれのocxについて次のようなウィンドウが表示されます。
こうすると、正常に動きます。
しかし、私のPCでのみ動きませんでした。
追記
以下の2つのdllファイルを削除する操作を、それぞれの環境で行ったところ、それぞれの環境で正常にアプリが起動しました。
・GLU32.DLL
・OPENGL32.DLL
①私の環境(Win10自作PC)
無事アプリが正常に起動し、ウィンドウ上でマウスをスクロールしても、「マウスカーソルの横に砂時計が3回ほど表示され、アプリが終了」ということは起きず、表示される地図のスケールを変更することができました。(正常にアプリが起動しました)
テストとして、過去に作成し、保存していたファイルを開くこともできました。
②VirtualBox(Win11仮想PC)
こちらの現在正常に動いている方でも試してみました。
最初、アプリを起動状態(わざと)で C:\Program Files\OnStation にあるdll2つを削除しようとしましたが、「OnStationによって開かれているため、操作を完了できません。」と表示されました。
これから分かる通り、このディレクトリにdllファイルが2つあるときは使用しているようです。
もちろん、アプリを閉じてからdllファイル2つを削除し、再度アプリを起動すると、正常に動きました。
結果、どの環境でもdllを2つ削除すると、正常に起動することが分かりました。
なぜ、C:\Program Files\OnStation にdllを置いていると、アプリはそれを使ってしまうのでしょうか?
実現したいこと
- 自分のPC環境で動かない原因の特定(一応解決)
- wglMakeCurrentのエラー除去
該当のソースコード
このslnをデバッグで実行したところ、次の場所で例外がスローされます。
OnStation/src/OnStationView.cppにある、
C++
1void COnStationView::OnDraw(CDC* pDC) 2{ 3 //OpenGL isn't particular about this, so we can't be either 4 //otherwise text and so forth dissappear as soon as we repaint. 5 //This doesn't work 6// InvalidateRect(NULL,FALSE); 7 8 // TRACE(_T("Entering OnDraw()\n")); 9 SetScalingAndLighting(0); 10 // Make the rendering context current 11 wglMakeCurrent(m_hDC,m_hRC); 12 13 // Call our external OpenGL code 14 GLRenderScene(0); 15 16 if (pSettings_G->m_ViewTypes[pSettings_G->m_iColorSchemeIndex]==VT_MIXED) 17 { 18 SetScalingAndLighting(1); 19 // Call our external OpenGL code 20 GLRenderScene(1); 21 } 22 SwapBuffers(m_hDC); 23 wglMakeCurrent(m_hDC,NULL); 24 25 //Attempt to fix redraw problem with text 26 27 CDC * pDC2 = GetDC(); 28 DrawGDIStuff(pDC2); 29 ReleaseDC(pDC2); 30// TRACE(_T("Leaving OnDraw()\n")); 31}
ソース上だと226行目(上のコードだと23行目)にある、wglMakeCurrent(m_hDC,NULL);
でエラーが出ています。
error
10x7D306CCB (OPENGL32.DLL) で例外がスローされました 2(OnStation.exe 内): 0xC0000005: 場所 0xAF16DFC0 の読み取り中にアクセス違反が発生しました
OpenGLが悪さしているように思いますが、私のPCにはOpenGLを使う普通のソフトも入っており、正常に動作しています。プログラムの環境としてOpenGLはこのサイトを参考にしています。
上記dllファイルはgitをプルしたディレクトリには入れてないので、関係ないと思いますが、dll削除後にデバックで実行しましたが、同じ場所で例外がスローされます。
これは、デバックで実行後に表示されたウィンドウ上でマウスをスクロールすると例外がスローされます。(ocxの問題ですよね多分(笑))
補足情報(FW/ツールのバージョンなど)
Windows10
VisualStudio2022
OnStation 3.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/01/02 18:11 編集
2023/01/03 03:04