🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

OCX(OLE Control Extension)

OCX(OLE Control Extension)は、Windowsでのアプリケーション間でデータを連携できるOLE技術を用いて開発されたコントロール。OLEコントロールとも呼ばれていましたが、インターネットサポート機能が追加されてからは、ActiveXコントロールと呼ばれています。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1033閲覧

オープンソースソフトのwglMakeCurrentのエラーについて

yukimeat1999

総合スコア20

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

OCX(OLE Control Extension)

OCX(OLE Control Extension)は、Windowsでのアプリケーション間でデータを連携できるOLE技術を用いて開発されたコントロール。OLEコントロールとも呼ばれていましたが、インターネットサポート機能が追加されてからは、ActiveXコントロールと呼ばれています。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2023/01/01 14:35

編集2023/01/17 08:19

前提

一般公開されているソフト(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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

OnStation.exeがあるディレクトリに以下のファイルがある状態にします。(私はそれぞれのファイルがなぜ必要かは知りません)
・GLU32.DLL
・grid32.ocx
・OPENGL32.DLL
・pdate32.ocx
・Uninst.isu

下記ファイルは OS 標準で提供されている DLL である為、通常、追加の導入は不要です。
OnStation.exeがあるディレクトリから下記 DLL を除去して問題が改善するか確認頂けますか?

・GLU32.DLL
・OPENGL32.DLL

投稿2023/01/02 02:19

cx20

総合スコア4648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukimeat1999

2023/01/02 18:11 編集

以下の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を置いていると、アプリはそれを使ってしまうのでしょうか?
cx20

2023/01/03 03:04

> ではなぜ、C:\Program Files\OnStation にdllを置いていると、アプリはそれを使ってしまうのでしょうか? アプリケーションと同じフォルダにある DLL を最初に探しに行くのは Windows OS の仕様によるものです。 OS のバージョンや設定によっては多少 DLL の検索順は変わりますが、概ね下記の順番になります。 ■ デスクトップ アプリケーションの標準検索順序 - Microsoft Learn https://learn.microsoft.com/ja-jp/windows/win32/dlls/dynamic-link-library-search-order#standard-search-order-for-desktop-applications > 1. アプリケーションの読み込み元ディレクトリ > 2. システム ディレクトリ > 3. 16 ビット システム ディレクトリ > 4. Windows ディレクトリ > 5. カレントディレクトリ > 6. PATH 環境変数に設定されているディレクトリ ちなみに、誤ったバージョンの DLL を読み込んでアプリケーションが動かなくなるような事象は「DLL 地獄(DLL Hell)」と呼ばれることがあります。 ■ DLL地獄 - Wikipedia https://ja.wikipedia.org/wiki/DLL%E5%9C%B0%E7%8D%84
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問