MinGW

環境整備 Edit

ダウンロード Edit

インストール Edit

とりあえずサンプルプラグインをビルドしてみる Edit

ソースの修正 Edit

pwsRTValue.h Edit
  • boolean → bool BOOL
    • ISO C++ forbids declaration of `boolean' with no type と怒られる
    • 正直よくわかってない
    • on BCC55
      • winsock.h → windows.h → rpcndr.h
      • typedef unsigned char boolean;
    • windef.h によると BOOL は typedef int BOOL
  • ということで、#define PWSRTValueH の下に
    #if defined( __GNUC__ )
    	typedef unsigned char boolean;
    #endif
    
    としてみた
biff.cpp Edit
  • 61 行目の #else の上に
    #elif defined( __GNUC__ )
      extern "C" BOOL APIENTRY DllMain( HINSTANCE hinst, DWORD  reason, LPVOID lpReserved )
    
    • 2006-03-24 修正: GCC では extern "C" をつけないと呼ばれないらしい?
  • PWCInitialize 関数内の以下をコメントアウト
        if( major != 1 || minor < 50 || 59 < minor )
            return FALSE;
    
pop3.cpp Edit
  • main 関数をコメントアウト

C++ ソースのコンパイル Edit

g++ -c account.cpp
g++ -c biff.cpp
g++ -c configdlg.cpp
g++ -c md5.cpp
g++ -c pop3.cpp

リソースのコンパイル Edit

windres --language=0411 -o biff.rc.o biff.rc

リンク Edit

dllwrap -k -def biff.def --driver-name g++ -o biff.dll account.o biff.o configdlg.o md5.o pop3.o biff.rc.o -lwsock32
  • こんなんでもよさげ (.def 作らなくていい)
    g++ -shared -o biff.dll account.o biff.o configdlg.o md5.o pop3.o biff.rc.o -lwsock32 -Wl,--kill-at
    • -Wl,--kill-at がないと本体から呼べない

よくわからない点 Edit

  • C++ でなく C でプラグインは書けないのだろうか → pwsRTValue.h

To Do Edit

  • とりあえず biff を動かす (なぜか設定ダイアログが出ない)
  • FreeBSD 上でのクロスコンパイル環境

その他メモ Edit

  • MSVC の .lib ファイルを .a に
    • reimp foo.lib
      • reimp は mingw-utils に入ってる
    • libfoo.a ができる
    • C:\MSYS\1.0\local\lib あたりに置いておく
    • .def があるなら dlltool -U -d foo.def -l libfoo.a でもよさげ
      • うまくいかない (実行時にエントリポイントが見つからないと言われる) 関数名に _ が追加されてる?

参考 Edit


Chararinaプラグイン開発