HimaJyunどうもこんにちは、Windows10にアップグレードした(もちろん自分の意思で、決してゲイツに押し付けられた訳では無い)@HimaJyunです。フルスクリーンで正常に動作しない。convertor」を使う手法の原理を解説してみようと思う。最後に先に方法を紹介しておくこの記事は技術的な解説を目的としていますが、対策方法を知りたくて来ていただいた方が居るかも知れないので、先に東方紅妖永花文萃(面倒なのでここから先「東方旧作」と表記)をWindows10に対応させる方法をご紹介しようと思います。(技術的な事を知りたい方はこの節を飛ばしてね。)東方旧作をWindows10で正常にフルスクリーンで動作させる方法、僕が知り得る限りは2つ。1つは、ウインドウモードで動作させて、ウインドウを強制的にフルスクリーンにしちゃうソフトを使う手法。これは色々納得がいかないので(アスペクト比が画面と合わないとか)、個人的にはここで紹介する手法をおススメします。converterのページを訪れる、ムズカシイコトバが並んでいるが気にしない気にしない。Files\上海アリス幻樂団、どちらかの中に「東方[作品名]」と言うフォルダがある、そこの事)サイトによっては「中身を全部」って書いてあるがlicense_en.txtとreadme_en.txtはただのテキストファイルなのでなくても良い(あっても害はないので良く分からないなら全部コピーすれば良し)後は普通に東方を起動すれば優雅にフルスクリーンで動く。他の物でも問題無く動くと言う事だと思う(ソースコードは基本的に使い回すものなのだ)ところでこれってどう言う原理?ここからお話が一気に難しくなるので、dllを何か色々ダウンロード出来るサイトだと思っているオコチャマにはお帰り頂く事を推奨する。(読んでも良いけど絶対に難し過ぎて理解出来ない)さて、ここでプログラムやらサーバ管理やらを趣味でやっている僕としては気になる事がある。「どうやってんだこれ?」と言っても、Windowsプログラミングに経験があればファイル名(d3d8.dll)などで気付くはず。言う訳で説明してみる(ちょっと長いので、例えばあなたが「病院のベッドの上」とかでも無い限りは読まずに働いた方がよっぽど生産的、説明が正しいかどうかの保証も出来ないので......)依存とライブラリこの世に存在する(ほぼ)全てのソフトウェアは何かに依存している。「俺は言語の標準ライブラリしか使ってねーよ!!」と言う方、その言語の標準ライブラリを提供するのはOSだぜ?すなわち、OSに依存しているんだ。この「依存しているライブラリ」普通はlibやdllと言うファイルとして提供される(libは組み込まれるので、実質ユーザの目に触れるのはdllのみ)libは「スタティックライブラリ」などと呼ばれ、コンパイル時にexe内に同梱される。(と言うより、組み込まれる)、こうする事でexe単体での起動が可能になる。Library」の略で、exeファイルとは別に作成される。これを、実行時にメモリ上にロードして使用するのだ。する事で、例えばソフトウェア(dll部に)バグがあった際にdllを置き換えるだけで修正したり、複数のソフトウェアから利用される際にメモリ上のdllを共有してメモリ効率を良くしたりする。その代わり、exe単体では起動できなくなる。普通、グラボとかの命令は製品によってマチマチなのだが、DirectXはそれらの差異を吸収して、同じコードで如何なる環境でも扱える様にしてくれる(厳密には、デバイスドライバとの合体技で成り立っているんだけどもね)良く似た物だと、OpenGLなどがあるが、DirectXの優位な点は「早い」事。多くのPCゲームは(そして東方も)DirectXを利用して作成されている(今回問題となる東方はDirectX8を使用)となると、必然的に利用するユーザが増える訳で、グラボメーカなどがより高速に動作する様にDirectXのための最適化を施す。DirectXに最適化されている例として挙げられるのがnvidiaのGeForceやAMDのRadeonなどの製品(一方で、nvidiaのQuadroや、AMDのFireProの様なOpenGLに最適化された製品もある)DirectX、これ1つで、画面への出力やサウンドの再生、果てはゲーム用のコントローラの制御も可能にする凄い奴。弱点が無いわけでも無く、これの弱点は「Microsoftの製品」だと言う事すなわち、Microsoftの製品(WindowsやXbox)でしか利用できず、DirectXで出来たゲームは必然的に*nix(MacとかLinux)では動作しないと言う事になる。先程説明した「dll」実行ファイル(.exe)のある場所に必ず含まれているとは限らない(OSの提供するdllなど)逆に、OSの提供するdllがある場所に目的のdllがあるとは限らない(サードパーティー製のdllなど)すなわちどういう事かと言うと、起動する際にdllを複数の場所から検索していると言う事。Manager\KnownDLLsにて指定されている)exeファイルが含まれているフォルダプロセスのカレントディレクトリWindowsのシステムフォルダ(C:\Windows\System32)Windowsフォルダ(C:\Windows)環境変数「PATH」のフォルダ以上の順番でdllの検索が行われ、見つかった時点での物を利用する。答えが出た様なモノだね。convertor」はあたかも「DirectX8を提供するためのライブラリ」の様に見せかけてOSに「同じ名前の別のライブラリ」をロードさせる。ロードされたライブラリ内では同等の機能を提供するDirectX9のAPIを呼び出しており、見かけ上はDirectX8っぽく振る舞いつつ、中身はDirectX9、みたいな事が出来る。(ちなみに、OpenGLっぽく見せかけて中身がDirectX、もしくはその逆、みたいなライブラリもあるらしい)こうする事で、DirectX8のAPIとして呼び出すとバグる機能も、処理をDirectX9に投げているので正常に動作する、と言う訳。シンプルな原理だが、良く思い付いたな、と思う、動作速度的にも(多分)問題ない、こう言うのが才能なんだな、と言う印象。convertor」はファイル名が「d3d8.dll」でなくてはならず、また、プログラム(exe)がある場所と同じフォルダに配置する必要がある。(これが何故かは先程のdllの検索順序を考えれば理解出来るはず。)ちなみに「d3d8.dll」はDirectX8のdllのファイル名。最後にここで名前が挙がった様々な物は僕が作った訳では無いので、この説明や原理が正しいかどうかの保証は出来ませんが、少しでも参考になればと思い(ついでにネタになるので)記事にしてみました。PEを買ってみました。HTTPで利用出来る様にするナカのヒト:HimaJyun​散って美しいのは桜だけです、情報はまとまっていた方が美しいのです。