11.28.2009

Objective-CでWindowsアプリを作ってみる。

そんなわけで、Objective-Cな環境の導入に成功したので、

#import <windows.h>
#import <objc/Object.h>

@interface SayHello : Object
- (void) Hello;
@end;

@implementation SayHello
- (void) Hello
{
MessageBox( NULL, "HELLO WORLD", "MESSAGE", MB_OK);
}
@end;

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd)
{
id obj = [SayHello new];
[ obj Hello ];
[ obj free];
return 0;
}

とかいうプログラムをこさえてみた。

要はCと親和性が良いというなら、Cから使えるWin32APIだって呼べるんじゃねぇの?という発想。

コマンドラインから
$gcc objcwin.m C:\mingw\lib\gcc\mingw32\4.4.0\libobjc.a -mwindows

とかして、-mwindowsオプションをつけてMinGW-gccでコンパイルをかけてやると、アッサリ通った。
MessageBox程度だけど、すんなり行けちゃった事にオドロキを覚えた。

この調子なら、SDLあたりもいけそうかな。また今度試してみようと思う。
で、せっかくならこれを生かしてマルチプラットフォームなGUIアプリでも組めたら、さぞ面白いだろうと思ったんだけど、Cで実装されてるGUIライブラリで有名なものって、私の大嫌いなGtk+ぐらいしかないのね。

う~ん。となると、Objective-Cはお遊び用かなぁ。
C++と混在できれば、wxWidgetとか使えるんだろうけどな。
その辺も調べてみようと思いまつ。

2 件のコメント:

Unknown さんのコメント...

はじめまして
Objective-C++というのもありますよ
構文チェックが凄く厳しくなりますが・・・

Akira さんのコメント...

okraさん、情報ありがとうございます。
今はlinux環境に以降したのでObjective-C++を使えるようになりましたが、確か当時はwindows向けのObjective-C++処理系がみつからなくて、C++と混在できたら〜なんて書いた気がします。
(もしかして、MinGWのObjective-Cコンパイラは、普通にObjective-C++のコードも処理してくれるんでしょうかね(^^;)

Objective-C++にすると構文チェックが厳しくなるとのことで、また機会があったらObjective-C++も含めて触ってみたと思います。