やっと動作する gogo.dllが生成できました。
とりあえず、wingogo、cdex、Cd2Wav32、試験的に作った自作プログラムではエンコードできています。
使用したのは 「午後のこ〜だ Ver2.39b」のソースです。
一番悩んだのは Version Infoのリソースの組み込み。組み込まなくても動くんですが、著作権表示も
なにもされないのは作者の方たちに失礼になっちゃいますから。ただリソースコンパイラがエラー吐くも
んで英語表記のみとなってしまいました。(;_;)
(Borland C++5.5 に付属しているBRCC32.EXEなどで一旦
RES形式にコンパイルして RES2COFF.EXE
などで COFF形式に変換すれば日本語込みでリンクできることは確認できました。)
あともう一点問題になりそうなところがあります
エクスポート関数の序数がオリジナルと違うかも・・・
(リンクのときに gogo_dll.def を含めてやれば指定できるはずなんだけど、なぜかうまくできない。
まぁ自前のdll使うアプリ以外で序数呼び出しにしてるのはあまりないかな。・・・ってことで放って
あるわけなんだけど暇が出来たら試行錯誤してみようと思ってます。)
まず最初にMingw32.-gcc を最新のものにてください、リリース版の
2.95.2 を使ってる方は
ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/snapshots/gcc-2.95.2-1/
にある以下の4つのファイルをダウンロードしてきて、2.95.2の上へ上書き解凍してください。
gcc-2.95.2-1-msvcrt.zip
mingw-msvcrt-20000203.zip
binutils-19990818-1-msvcrt.zip
binutils-fixes-msvcrt.zip
このアップデートしないと -shared オプションでの簡単dll作成モードが使えないので、dllwrap.exeやら
dlltool.exeを使わないといけないので面倒です。
でソース関係は以下の修正をして この makefile を使ってビルドすれば gogo.dllが出来上がってると
思います。
console版をビルドしたときの *.oが残ってるときは削除してビルドしたほうがいいです。
ちなみにオフィシャルリリースのバイナリとのベンチ比較はこうなりました。
なおここで書いてある情報は無保証ですのでごその点ご留意願います。
またここに書かれている方法に関して「午後のこ〜だ」作者の方に質問メールなどをしないようお願い
致します。自力でなんとかしてください。
---------------------------------------------------------------------- gogo_dll.cpp:51 #include "stdafx.h" ↓ #include <windows.h> gogo_dll.cpp:55 BOOL APIENTRY DllMain( HANDLE hModule, ↓ extern "C" BOOL APIENTRY DllMain( HINSTANCE hModule, ----------------------------------------------------------------------- gccで以下の部分でエラーになるので型キャストで逃げる(^^;) con版と同様 ---------------------------------------------------------------------- musui.c:941 (curTime%CLOCKS_PER_SEC)*(1000000L/CLOCKS_PER_SEC), ↓ ((long)curTime%(long)CLOCKS_PER_SEC)*(1000000L/CLOCKS_PER_SEC), musui.c:991 (curTime%CLOCKS_PER_SEC)*(1000000L/CLOCKS_PER_SEC), ↓ ((long)curTime%(long)CLOCKS_PER_SEC)*(1000000L/CLOCKS_PER_SEC), ---------------------------------------------------------------------- gogo_dll.rc の編集 ---------------------------------------------------------------------- ●windresが文句言う(日本語が入ってると動作が変)ので 87行の BLOCK "041104b0" の行からその下にある最初の END (102行)まで削除。 ●1行目〜50行目までを削除し、1行目に #include "resource.h" を追加する。 以下のようになるはず (VC++ 依存部分の削除) #include "resource.h" ///////////////////////////////////////////////////////////////////////////// // // Version // (後略) ●その少し後にある VS_VERSION_INFO VERSIONINFO を 1 VERSIONINFO と変更 -----------------------------------------------------------------------
なお、3DNow!対応とする場合の nasmwや *.nasの処理、ソースの文字コードや改行コードの
変換は「午後のこ〜だ」ソースファイルに付属しているドキュメントに従ってやっておいてください。