片目猫Tools

プログラマ片目猫の送る便利ツール集

Dot.exeのダミープログラムを作る

2008-01-27 22:48:55 | ツール
環境は整ったので、さっそくダミープログラムを作りましょう。

まずは、プロジェクトの新規作成です。
作成するのは、「Win32コンソールアプリケーション」
です。
そして、プロジェクト名はもちろん"dot"です。

前回書いたように、まずプロジェクトで使用する文字セットを「設定なし」
に変えます。

まず、コマンドライン引数の内容を出力するコードを書きましょう。
#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
	FILE * fp = NULL;

	fp = fopen("c:¥¥result.txt","a");

	if(fp == NULL)
	{
		printf("error!¥n");
		return 1;
	}

	for(int i=0;i<argc;i++)
	{
		fprintf(fp,"%s¥n",argv[i]);
	}

	fclose(fp);
	return 0;
}

こんな感じです。
c:¥result.txtへ結果が出力されます。
※出力先は、適当に変更してください。

このプログラムをビルドすると、dot.exeファイルが得られます。
これを、Graphvizのオリジナルのdot.exeと置き換えるのです。
オリジナルのdot.exeは、dot.exe.orgとでもリネームしておきましょう。

そして、Doxygenを実行すると... c:¥result.txtができました!
内容は、こんな感じです。
================================================================
C:¥Program Files¥Graphviz2.17¥¥bin¥dot.exe
dir_61bd93f948ed629e3277a84e9e481dc1_dep.dot
-Tpng
-o
dir_61bd93f948ed629e3277a84e9e481dc1_dep.png
================================================================

狙いどおり、dot.exeへのコマンドライン引数を得ることができました。

さらに、引数で渡された内容から、目的のdotファイルをコピーするコードを
書きます。
#include "stdafx.h"
#include "string.h"
#include "windows.h"

int _tmain(int argc, _TCHAR* argv[])
{

	FILE * fp = NULL;
	char str[256];

	strcpy(str,"c:¥¥");
	int len = strlen(str);
	strcpy(str+len,argv[1]);
	
	fp = fopen("c:¥¥result.txt","a");

	if(fp == NULL)
	{
		printf("error!¥n");
		return 1;
	}

	for(int i=0;i<argc;i++)
	{
		fprintf(fp,"%s¥n",argv[i]);
	}

	CopyFile(argv[1],str,FALSE);

	fclose(fp);
	return 0;
}

これで、c:以下にdotファイルがコピーされます。
ビルドしてできたdot.exeを、再度Graphvizのものと置き換えてDoxygenを
実行すると...

めでたくdotファイルを得ることができました!

これで説明は終わりです。
今回のコマンドライン引数を調べるプログラムは、いろいろ応用が効きます。
Graphvizに関わらず、いろいろ試してみてください。

あと、置き変えたファイルは、オリジナルのファイルに戻すのを忘れないで
くださいね!

それでは。