SewiGの日記
2005-07-04 [月]
■ [Programming] Visual C++ Toolkit 2003 + DirectX 9.0の環境構築メモ
必要なもの
※以下で説明するパスは自分の環境に合わせて読み替えてください。(ドライブ名やインストール先)
1. 上記の3つをインストール
2. Windows XPなら「システムのプロパティ」→「詳細設定」→「環境変数」でPATHにC:\Program Files\Microsoft Visual C++ Toolkit 2003\binを追加
3. C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin\vcvars32.batを編集
@echo off SET PFSDK=C:\Program Files\Microsoft Platform SDK SET VCTK=C:\Program Files\Microsoft Visual C++ Toolkit 2003 SET DXSDK=C:\Program Files\Microsoft DirectX 9.0 SDK (June 2005) SET PATH=%VCTK%\bin;%PFSDK%\Bin;%PFSDK%\Bin\Win64;%PATH% SET INCLUDE=%DXSDK%\INCLUDE;%VCTK%\include;%PFSDK%\Include SET LIB=%DXSDK%\Lib\x86;%VCTK%\lib;%PFSDK%\Lib echo OK
4. 作業ディレクトリでプログラムを作成
5. コマンドプロンプトを開いて、作業ディレクトリに移動
6. > vcvars32を実行し、環境変数を設定
7. cl.exeでコンパイル、link.exeでリンク、rc.exeでリソースなのですが、makefileを作成し、ビルドを自動化
EXE = sample.exe SRC = sample.cpp OBJ = sample.obj LIBS = d3d9.lib d3dx9.lib dxguid.lib winmm.lib kernel32.lib user32.lib gdi32.lib CC = cl.exe CFLAGS = /c /W3 /O2 LINK = link.exe LFLAGS = /SUBSYSTEM:WINDOWS all: $(EXE) $(EXE): $(OBJ) $(LINK) $(LFLAGS) /OUT:$(EXE) $(OBJ) $(LIBS) $(OBJ): $(SRC) $(CC) $(CFLAGS) $(SRC) clean: del *.obj
8. > nmake でビルド
9. 実行ファイルが完成してうれしいね
もし、コンパイルで失敗したらソースコードを見直してください。リンクで失敗したら、必要なライブラリがLIBSに記述されているか確認してください。あとは単純にタイプミスとか、コンパイル漏れとか。
2006-07-04 [火]
■ [Programming] 集合書き込みと拡散読み出し(2)
で、集合書き込みで書き出したデータを読み込む方法を考えます。拡散読み出し(scatter read)は、集合書き込みとは逆にiovecにデータを格納します。
ssize_t readv(int fildes, const struct iovec *iov, int iovcnt);
writevとほとんど同じですね。ただ、どういうバッファを書き込んだかを読み込む側が知っている必要があります。なので、引数に渡す前に、iov_lenにバッファ長をセットしておきます。
#include <stdio.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main() {
int i;
int fd;
int iovcnt;
struct iovec iov[3];
char buffer1[5];
char buffer2[19];
char buffer3[3];
iov[0].iov_base = buffer1;
iov[0].iov_len = 4;
iov[1].iov_base = buffer2;
iov[1].iov_len = 18;
iov[2].iov_base = buffer3;
iov[2].iov_len = 2;
iovcnt = sizeof(iov) / sizeof(struct iovec);
fd = open("hoge.txt", O_RDONLY);
readv(fd, iov, iovcnt);
close(fd);
for (i = 0; i < 3; i++) {
iov[i].iov_base[iov[i].iov_len] = '\0';
printf("%s", iov[i].iov_base);
}
printf("\n", iov[i].iov_base);
return 0;
}
● てっつん [おーっとさっき電話した時はコレを見逃していた…。めちゃめちゃプログラムの話題振ってくれていたのね…。9をするなら対応..]
● SewiG [私のメインPCはGeForceFX 5500ですよ。 あー、5200買いましたか。XだったらnVIDIAなのかな。ド..]
● てっつん [実質的にはATIでも問題ないだろうけど、比べた時、radeonでは問題があった、てのをネットで2件ほど見かけたので(..]