cygwin/MinGW で Windows GUIアプリ
2007-03-14-1 / カテゴリ: [programming][win][cygwin][c] / [permlink]
朝、目覚まし時計に反応できるようになった今日この頃。2度寝しないように「うりゃ!」と叫んでなんとか頑張ってる。
cygwin の gcc でも、WinMain 関数で普通にコンパイルできるのね。
-mno-cygwin オプションで、cygwin1.dll をリンクしないネイティブアプリ、
-mwindows オプションで、GUIアプリができる。
(-mwindows がないと、exe実行時にコマンドプロンプトも表示されてしまう)
関連:bcc でWindowsプログラミングのコンパイル[2005-08-01-1]
cygwin の gcc でも、WinMain 関数で普通にコンパイルできるのね。
-mno-cygwin オプションで、cygwin1.dll をリンクしないネイティブアプリ、
-mwindows オプションで、GUIアプリができる。
(-mwindows がないと、exe実行時にコマンドプロンプトも表示されてしまう)
関連:bcc でWindowsプログラミングのコンパイル[2005-08-01-1]
《続きを読む》
外部プログラムの標準出力を取得する
2007-03-07-1 / カテゴリ: [programming][c] / [permlink]
popen(3) を使う。
#include <stdio.h> int main() { FILE *fp = NULL; char buf[1024]; fp = popen("ls", "r"); if (fp == NULL) { printf("fp == NULL\n"); return 1; } while (fgets(buf, sizeof(buf), fp)) { printf("[%s]", buf); } pclose(fp); return 0; }↑この場合、ls の出力の各行末の改行は付いたまま。
カスタムウィザードで作成するプロジェクトのリンクファイルのデフォルト設定を追加(VC2003.net)
2007-02-23-2 / カテゴリ: [win][programming][c][VC++] / [permlink]
Vc7/VCWizards/[ウィザード名]/Script/1033/default.js
参考
VC++6.0のカスタムウィザードをVC++.NETに移行する(の日本語訳)
(タイトルの日本語がおかしいので訳した)
追記
1033(英語) じゃなくて 1041(日本語)のウィザードもあった。
複数言語へのウィザードのローカライズ
: var LinkTool = config.Tools('VCLinkerTool'); : // これを追加 LinkTool.AdditionalDependencies="netapi32.lib";Debug用とRelease用みたいに複数ある場合は全部追加する。
参考
VC++6.0のカスタムウィザードをVC++.NETに移行する(の日本語訳)
(タイトルの日本語がおかしいので訳した)
追記
1033(英語) じゃなくて 1041(日本語)のウィザードもあった。
複数言語へのウィザードのローカライズ
MACアドレスの取得
2007-02-21-2 / カテゴリ: [programming][win][c] / [permlink]
イーサネット アダプタのMACアドレスを取得する
アプリケーションが一意に判断できる値を得る方法
Netbios というAPIを使用して取得できる。
netapi32.lib をリンクする必要アリ
ただ、ケーブルの刺さっていない非アクティブなNICのアドレスは取れないっぽいなぁ。
アプリケーションが一意に判断できる値を得る方法
Netbios というAPIを使用して取得できる。
netapi32.lib をリンクする必要アリ
ただ、ケーブルの刺さっていない非アクティブなNICのアドレスは取れないっぽいなぁ。
Referrer (Inside):
[2007-02-26-1]
関数ポインタのtypedef
2007-02-20-1 / カテゴリ: [programming][c] / [permlink]
// 型 typedef int (*TYPENAME)(char *arg1, char arg2); // int は対象関数の戻り値の型 // TYPENAME は typedef で付けたい型名 // 変数宣言 (funcはポインタ/*はつけない) TYPENAME pfunc; // 代入 (関数名のみ) pfunc = functioin; // 関数定義 int function(char *arg1, char arg2) { : : } // コール n = pfunc(str, ch); // pfuncに代入されている function() がコールされる。 // 関数に渡す引数は普通に記述
gccでcygwin1.dllに依存しないようコンパイル
2006-11-17-1 / カテゴリ: [win][cygwin][c] / [permlink]
-mno-cygwin を付加する
$ gcc -mno-cygwin foobar.cこれでBCC要らない…のか?
$ cygcheck ./a .\a.exe C:\WINDOWS\system32\msvcrt.dll C:\WINDOWS\system32\KERNEL32.dll C:\WINDOWS\system32\ntdll.dll
iniファイルの読み書き
2006-09-13-1 / カテゴリ: [win][programming][c] / [permlink]
お手軽簡単。設定ファイルの読込み。
文字列の場合は
戻り値はstrに入った文字列長。
iniファイルへの書き込みは
数値を直接書くAPIはないので、sprintfあたりで文字列を生成して書き込む。
int n; n = GetPrivateProfileInt("Option", "foo", 100, "config.ini");で
[Option] foo=1024 bar=c:\winntなconfig.iniを読み込む。n は 1024 になる。(fooがなければ100)
文字列の場合は
char str[BUF]; GetPrivateProfileString("Option", "bar", "c:\\windows", str, sizeof(str), "config.ini");で、str に "c:\winnt" が入る(barがなければ c:\windows)
戻り値はstrに入った文字列長。
iniファイルへの書き込みは
WritePrivateProfileString("Option", "baz", "qux", "config.ini");config.iniのセクション"Option"に"baz=qux"を書く。セクション・キーがなければ新規に作成される。成功すれば0以外、失敗は0が返る。キー名をNULLにすればセクションが、値をNULLにすればキーが削除される。
数値を直接書くAPIはないので、sprintfあたりで文字列を生成して書き込む。
BCCで文字コード変換
2006-09-08-1 / カテゴリ: [win][programming][c] / [permlink]
とゆーアレで。
普段ならPerlでJcodeなり使ってとっとこやるとこだけど、妹さん(winユーザ)からアプリ(数千通のメールの集計処理)のリクエストなのでPerlインタプリタは候補からはずれる。
BCC(Borland C++ Compiler)で文字コードを変更する必要が。
ざっと検索した感じでは、iconvのWindows用DLLが使えそう。
普段ならPerlでJcodeなり使ってとっとこやるとこだけど、妹さん(winユーザ)からアプリ(数千通のメールの集計処理)のリクエストなのでPerlインタプリタは候補からはずれる。
BCC(Borland C++ Compiler)で文字コードを変更する必要が。
ざっと検索した感じでは、iconvのWindows用DLLが使えそう。
《続きを読む》
Makefile メモ(超基礎編)
2006-03-20-1 / カテゴリ: [c][programming] / [permlink]
ターゲット:<タブ>依存ファイル
<タブ>コマンド列
foo.c 1個のとき (実行ファイルfooをgccで生成)
foo:<tab>foo.c <tab>gcc -o $@ $^$@ は、ターゲットに展開される(-> foo)
$^ は、全ての依存ファイルに展開される(-> foo.c)
foo.c と foo.h のとき(foo.c は foo.h を include)
foo:<tab>foo.c <tab>gcc -o $@ $^ foo.o:<tab>foo.h
clean は
clean: <tab>$(RM) foo *.o *~とか
ネットワークバイトオーダへの変換
2006-03-13-1 / カテゴリ: [network][programming][c] / [permlink]
htonl ... long int htonl(long int hostLong) /* host to network long */ようやく「読める」ようになった.
htons ... short int htons(short int hostLong) /* host to network short */
ntohl ... long int ntohl(long int netLong) /* network to host long */
ntohs ... short int ntohs(short int netLong) /* network to host short */
参考: TCP/IP ソケットプログラミング C言語編
: struct sockaddr_in server; : : server.sin_addr.s_addr = htonl(INADDR_ANY); server.sin_port = htons(PORT); :
スタイルの変更
2006-03-06-2 / カテゴリ: [programming][c][meadow][emacs] / [permlink]
ずっと Perl やってたからかな? C でも BSD なスタイル(↓)で書いてる.
まぁ,いろいろあって GNU スタイル(↓)に改宗しよーと思い,
http://www.02.246.ne.jp/~torutk/cxx/emacs/indentation.html
どーやら Emacs では,デフォルトのスタイル(c-set-style で設定)は gnu で,上記の自動インデントを行うみたい.さすがに括弧の位置はインデントしたくないので,stroustrup を使うことにする.これなら関数も制御構文も
.emacs はこんな感じ
int function() { : }(Javaもこのスタイルっぽい)
まぁ,いろいろあって GNU スタイル(↓)に改宗しよーと思い,
int function() { : }Meadow でコードを書いてたら,関数は良いが制御構文が…
if (foobar) { : }えー!? ナニコレ!?
http://www.02.246.ne.jp/~torutk/cxx/emacs/indentation.html
どーやら Emacs では,デフォルトのスタイル(c-set-style で設定)は gnu で,上記の自動インデントを行うみたい.さすがに括弧の位置はインデントしたくないので,stroustrup を使うことにする.これなら関数も制御構文も
foobar { : }になってくれた.
.emacs はこんな感じ
(add-hook 'c-mode-common-hook '(lambda () (c-set-style "stroustrup") (setq c-basic-offset 4) ; インデントは4文字 (setq indent-tabs-mode nil))) ; ハードタブじゃなくてスペース
ループ制御
2006-02-03-1 / カテゴリ: [c][perl][programming] / [permlink]
ループを抜ける
ループ条件を再評価(次のループ)
あれ、Perl にも continue あったような…
man perlfunc "continue BLOCK"
C にも unless が欲しいな…
break (C) last (Perl)
ループ条件を再評価(次のループ)
continue (C) next (Perl)
あれ、Perl にも continue あったような…
man perlfunc "continue BLOCK"
C にも unless が欲しいな…
定義・参照位置のズレを直す(VC6.0)
2005-12-16-1 / カテゴリ: [win][programming][c][VC++] / [permlink]
いつのまにか「定義位置を表示」「参照位置を表示」が実際の位置からズレてしまうことがある。
プロジェクトのブラウズ情報である .SBR と .BSC がおかしくなっている状態なので、一度この2つのファイルを削除して、「定義位置を表示」とかすれば、ブラウズ情報を生成するためにプロジェクトをリビルドしますか? と聞いてくる。
.SBR と .BSC は Debug ディレクトリ以下にあるかも。
// VC++ カテゴリを追加...
プロジェクトのブラウズ情報である .SBR と .BSC がおかしくなっている状態なので、一度この2つのファイルを削除して、「定義位置を表示」とかすれば、ブラウズ情報を生成するためにプロジェクトをリビルドしますか? と聞いてくる。
.SBR と .BSC は Debug ディレクトリ以下にあるかも。
// VC++ カテゴリを追加...
10桁以上の整数の計算
2005-12-15-1 / カテゴリ: [programming][c] / [permlink]
long long intでGO
unsigned long long int foobar; : : printf("foobar: %llu\n", foobar);
long 1個じゃ足りない。
VC++6.0 定義位置と参照位置のキーバインド
2005-12-14-1 / カテゴリ: [win][programming][c][VC++] / [permlink]
定義位置: カーソルを合わせて [F12]
参照位置: カーソルを合わせて Shift - [F12]
次の参照位置: Ctrl - NUM+
前の参照位置: Ctrl - NUM-
一つ前に見た箇所への戻るは[2005-12-03-1]
しっかし、なんで数字キーONLYなんだ… 使いにくいよ…
参照位置: カーソルを合わせて Shift - [F12]
次の参照位置: Ctrl - NUM+
前の参照位置: Ctrl - NUM-
一つ前に見た箇所への戻るは[2005-12-03-1]
しっかし、なんで数字キーONLYなんだ… 使いにくいよ…
ユーザ定義キーワード(VC6.0)
2005-12-12-1 / カテゴリ: [win][programming][c][VC++] / [permlink]
ユーザー定義キーワードに色を付ける−VC++−水無瀬の部屋
VisualStudio 2003 .Net だと、C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\usertype.dat
実行ファイル msdev.exe のあるフォルダにキーワード定義ファイル usertype.dat を置くことで指定の字句に色を付けて表示させることができる。某 SDK の API リストをリファレンスから抜き出して C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\usertype.dat に1行1ワードでおいておけば色が変わった。
VisualStudio 2003 .Net だと、C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\usertype.dat
Referrer (Inside):
[2008-02-27-1]
C++ 基礎の超基礎の最初の方の初歩
2005-12-09-2 / カテゴリ: [programming][c] / [permlink]
間違いあるかも.
Foo::bar;Foo クラスの bar インスタンス変数
Foo::Baz();Foo クラスの Baz() メソッド (引数なしの場合の括弧忘れに注意->非OOPなPerl使い)
class Foo { : Foo(); : };クラス名と同じメソッドはコンストラクタ
class Foo { : ~Foo(); : };チルダが付くとデストラクタ
class Foo { : char Baz(); int Baz(int x); : };メソッドのオーバーロードは、同じメソッド名で戻り値の型・引数の型・引数の数のどれかが異なること。
最終更新時間: 2013-05-02 16:12