GetWindowTextのパラメータは文字数?戻り値はバイト数?

この記事は2年以上前に書いたものです。
そのため情報が古い可能性があります。ご了承ください。m(_ _)m

GetWindowText 関数を見ると、

int GetWindowText(
  HWND hWnd,        // ウィンドウまたはコントロールのハンドル
  LPTSTR lpString,  // テキストバッファ
  int nMaxCount     // コピーする最大文字数
);

パラメータ
hWnd
ウィンドウ( またはテキストを持つコントロール)のハンドルを指定します。
lpString
バッファへのポインタを指定します。このバッファにテキストが格納されます。
nMaxCount
バッファにコピーする文字の最大数を指定します。テキストのこのサイズを超える部分は、切り捨てられます。NULL 文字も数に含められます。
戻り値

関数が成功すると、コピーされた文字列の文字数が返ります( 終端の NULL 文字は含められません)。タイトルバーやテキストがない場合、タイトルバーが空の場合、および hWnd パラメータに指定したウィンドウハンドルまたはコントロールハンドルが無効な場合は 0 が返ります。拡張エラー情報を取得するには、 関数を使います。

他のアプリケーションのエディットコントロールのテキストをこの関数で取得することはできません。

とあった。nMaxCountと戻り値のどちらも、文字数とあるので、
↓こんなソース書いて動かしてみた。(hWndのタイトルには、結構眺めの日本語49文字)

char tmpBuffer[128];
int ret = GetWindowText(hWnd, tmpBuffer, 64);

すると、、、retに、98が!?

戻り値はバイト数・・・なの??(結果を見るとそうなんだけど。)

GetWindowText Function (Windows)には、

nMaxCount [in]
int

Specifies the maximum number of characters to copy to the buffer, including the NULL character. If the text exceeds this limit, it is truncated.

Return Value

int

If the function succeeds, the return value is the length, in characters, of the copied string, not including the terminating NULL character. If the window has no title bar or text, if the title bar is empty, or if the window or control handle is invalid, the return value is zero. To get extended error information, callGetLastError.

This function cannot retrieve the text of an edit control in another application.

・maximum number of characters

・the return value is the length, in characters, of the copied string, …

ま、分からないけど。。

Microsoft Visual C++ 2008にて。

(追記)

何が悪いって訳ではないですが、へぇ~。って思っただけ。バイト数返ってこないといろいろと面倒そうだけどね。

カテゴリー: プログラム | コメントする

Haikuインストール on ESXi 4.0

この記事は2年以上前に書いたものです。
そのため情報が古い可能性があります。ご了承ください。m(_ _)m

BeOS互換OS「Haiku」の初となる公式開発版「Haiku R1/Alpha」を試す

を見てインストールしてみた。

Home | Haiku Project

Haiku is a new open-source operating system that specifically targets personal computing. Inspired by the BeOS, Haiku is fast, simple to use, easy to learn and yet very powerful.

General FAQ | Haiku Project

What is Haiku?

Haiku is a fast, efficient, easy to use and learn open source operating system inspired by the BeOS that specifically targets personal computing. It is also the name of the project that develops and promotes Haiku the operating system.

Is Haiku based on Linux?

Haiku is not a Linux distribution, nor does it use the Linux kernel.

Installation Guide | Haiku Project

辺りを参考に。

 Get Haiku! | Haiku Projectから、ISOイメージをダウンロードして、VMにセット後、パワーオン。

haiku_001 haiku_002 haiku_003 haiku_004 haiku_005 haiku_006 haiku_007

HDDを認識してくれなかった。。orz

仕方ないので、vmdkの方を。

http://haiku-files.org/files/releases/r1alpha1/haiku-r1alpha1-vmdk.zip.torrent で落として展開後、VMware Converterで、ESXiへ変換。

haiku_008 haiku_009 haiku_010   haiku_013  haiku_015

 

変換が終わったら、パワーオン。

haiku_017

 

起動成功!

続きを読む

カテゴリー: VM | タグ: | コメントする

Solaris10インストール on ESXi 4.0

この記事は2年以上前に書いたものです。
そのため情報が古い可能性があります。ご了承ください。m(_ _)m

Solaris 10 – 概要 – サン・マイクロシステムズ

設定は適当。

solaris10_install_001

sol-10-u8-ga-x86-dvd.iso(2,563,440,640byte)をダウンロード(要登録)してきて、CD/DVDドライブに設定。

solaris10_install_002

仮想マシンコンソールの起動 → パワーオン。ほぼデフォルトのまま。

solaris10_install_004 solaris10_install_009 solaris10_install_012 solaris10_install_013 solaris10_install_014 solaris10_install_017 solaris10_install_019 solaris10_install_021 solaris10_install_023 solaris10_install_024 solaris10_install_025

続きを読む

カテゴリー: VM | タグ: | コメントする

各VMのホスト名でIPアドレスを引っ張ってくる(dhcp+bind)

この記事は2年以上前に書いたものです。
そのため情報が古い可能性があります。ご了承ください。m(_ _)m

ESXi環境下にVM(仮想マシン)を何個も作って行くと、ホスト名とIPアドレスをhostsに書いていくのがクソ面倒になってきたので、DHCPとDynamic DNSの連携システムを参考に、DHCPで割り当てられたIPアドレスと、ホスト名を結びつけることにしました。いわゆるDynamicDNS環境。

「各VMのホスト名でIPアドレスを引っ張ってくる」というよりは、DHCPクライアントから送られてきたホスト名を、DNSに登録する。って感じ。

自宅では、ESXiなサーバを常時稼働させているので、VMの一つにdhcpd+bindで、DynamicDNS環境を構築することにしました。

VMは、これといった理由はないけど、ubuntu9-serverで。

user@ubuntu9-server:~$ uname -a
Linux ubuntu9-server 2.6.31-19-server #56-Ubuntu SMP Thu Jan 28 03:40:48 UTC 2010 x86_64 GNU/Linux

ubuntu9-serverのIPアドレスは、192.168.0.49としました。
ドメインは”myhome”として設定してます。

まず、bind環境構築

とりあえず、インストール
$ sudo aptitude install bind9

zone設定。/etc/bind配下はapparmorで守られてる(?)ので、zoneファイルは、/var/lib/bind配下に格納するようにしました。(apparmorの存在を知らず、/etc/bind/配下で全ファイル置くようにしてたら、DNSの更新で何度やっても書き込めず失敗したことは内緒。)

/etc/bind named.conf.local

zone "myhome"{
        type master;
        file "/var/lib/bind/db.myhome";
        allow-update{
                127.0.0.1; 192.168.0.49;
        };
};

zone "0.168.192.in-addr.arpa"{
        type master;
        file "/var/lib/bind/db.192.168.0";
        allow-update{
                127.0.0.1; 192.168.0.49;
        };
};

/var/lib/bind/db.myhome

myhome                  IN SOA  ns.myhome. root.myhome. (
                                2010031586 ; serial
                                604800     ; refresh (1 week)
                                86400      ; retry (1 day)
                                2419200    ; expire (4 weeks)
                                86400      ; minimum (1 day)
                                )
                        NS      ns.myhome.

/var/lib/bind/db.192.168.0

0.168.192.in-addr.arpa  IN SOA  ns.myhome. root.myhome. (
                                2010031586 ; serial
                                10800      ; refresh (3 hours)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      ns.myhome.

$ sudo /etc/init.d/bind9 restart

nsupdateコマンドで動的に登録してみる。
ホスト名:test.myhome、IPアドレス:192.168.0.99

$ nsupdate -d
> server 192.168.0.49
> update add test.myhome 3600 A 192.168.0.99
> send
Reply from SOA query:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id:    107
;; flags: qr aa ra ; QUESTION: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:;test.myhome.INSOA
;; AUTHORITY SECTION:
myhome.86400INSOAns.myhome. root.myhome. 2010031586 604800 86400 2419200 86400

Found zone name: myhome
The master is: ns.myhome
Sending update to 127.0.0.1#53
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id:  49917
;; flags: ; ZONE: 1, PREREQ: 0, UPDATE: 1, ADDITIONAL: 0
;; UPDATE SECTION: test.myhome.3600INA192.168.0.99
・・・

登録したtest.myhomeをnslookupで確認。

$ nslookup 
> server localhost
> test.myhome
Server:localhost
Address:127.0.0.1#53 

Name:test.myhome
Address: 192.168.0.99

次に、dhcpサーバのインストールと設定。
続きを読む

カテゴリー: VM, サーバ管理 | タグ: , , | コメントする

ESXiのデータストアをiSCSI + OCFS2化って出来ないのか。。。

この記事は2年以上前に書いたものです。
そのため情報が古い可能性があります。ご了承ください。m(_ _)m

NFSなデータストア(ESXi以外でも使用)を、iSCSI + OCFS2化しようと調べてたけど、OCFS2でマウントしてデータストアとして扱うような事は出来ない模様。残念。iSCSIディスクを追加するときにVMFSにフォーマットするか聞かれる。

iSCSI SAN 構成ガイド
http://www.vmware.com/files/jp/pdf/vsp_40_iscsi_san_cfg_ja.pdf

iSCSI ストレージ エリア ネットワークでの
ESX/ESXi の使用

・・・

ストレージ仮想化
・・・
仮想マシンが仮想 SCSI コントローラのいずれかを経由してアクセスできる各仮想ディスクは、VMFS (VMware Virtual
Machine File System) データストア、NFS ベースのデータストア、または RAW ディスクにあります。仮想マシンの
観点からは、仮想ディスクは SCSI コントローラに接続された SCSI ドライブとして認識されます。ホストのパラレル SCSI、
iSCSI、ネットワーク、またはファイバ チャネル アダプタのどれを経由して実際の物理ディスク デバイスにアクセスする
かは、ゲスト OS および仮想マシンで実行されるアプリケーションにとっては透過的です。
・・・

カテゴリー: VM, サーバ管理 | タグ: , , | コメントする

ESXi用にメモリ(4GB x 2)購入

この記事は2年以上前に書いたものです。
そのため情報が古い可能性があります。ご了承ください。m(_ _)m

TSUKUMOで。

その他 バルクメモリ DDR2/800/4GB (ノーブランド) 《送料無料》
PC6400 240pin DDR2-SDRAM 800MHz 4GB
商品スペック
対応 PC2-6400 容量 4GB
ピン数 240ピン CL 6
ECC × チップメーカー ノーブランド
パッケージ バルク品
TSUKUMO 商品詳細バッジ で 2010-03-07 に生成しました

IMG_0262 IMG_0263

刺してMemtest86+を走らせる。

IMG_0267

IMG_0268

エラー無し!

esxi_memory

心が豊かになった気がした。

追記
DDR2-400 って表示されてる!?
気になって眠れなかったので、ソース見てみた。
http://www.memtest.org/#downcode
から、memtest86+-4.00.tar.gz をダウンロードして、展開して、それっぽいところをgrepで検索してみたら

・memtest86+-4.00/spd.c

	// Then module jedec speed
	float ddr2_speed, byte1, byte2;
	
	byte1 = (spd[9] >> 4) * 10;
	byte2 = spd[9] & 0xF;
	
	ddr2_speed = 1 / (byte1 + byte2) * 10000;

	temp_nbd = getnum(ddr2_speed);
	cprint(LINE_SPD+k, curcol, "DDR2-"); curcol += 5;	 
	dprint(LINE_SPD+k, curcol, ddr2_speed, temp_nbd, 0); curcol += temp_nbd;
  

で、ddr2_speedを吐き出している模様。
SPD(Serial Presence Detect)の9Byte目は、DDR2 DIMM SPD Definitions & Explanationsによると、SDRAM Device Cycle time らしい。DDR2-800だと、400MHzまでのFSBで動作(DDR2-800とは)するらしいから、それをそのまま表示しているんでしょう。

カテゴリー: VM, ハードウェア | タグ: , , , , | コメントする

OpenSolaris(2009.06)インストール on ESXi 4.0

この記事は2年以上前に書いたものです。
そのため情報が古い可能性があります。ご了承ください。m(_ _)m

OpenSolaris Download | Operating System Download | Get OpenSolaris

から、osol-0906-x86.iso をダウンロードしてきて、VMのCD/DVDドライブにセット。このisoイメージは、LiveCDになっていて、LiveCD環境が動作した後、HDDにインストールするような手順。

VMをパワーオン。

opensolaris_200906_001opensolaris_200906_003

なぜかリブートを繰り返す。。

SCSIコントローラを、LSI Logic SAS から、LSI Logic パラレルに変更したら、すんなり立ち上がる。

opensolaris_200906_004  opensolaris_200906_006opensolaris_200906_008  opensolaris_200906_013

デスクトップにある、デバイドライバユーティリティーを起動。

opensolaris_200906_014

VMXNET3はデフォルトでは認識せず。

次に、VMのHDDへインストール。

続きを読む

カテゴリー: VM | タグ: , | コメントする

Gentooインストール on ESXi 4.0

この記事は2年以上前に書いたものです。
そのため情報が古い可能性があります。ご了承ください。m(_ _)m

Core2Duo E7400 な ESXi 4.0環境にインストール

  1. http://ftp.jaist.ac.jp/pub/Linux/Gentoo/releases/amd64/current-iso/
    install-amd64-minimal-20100121.isoをダウンロード。
  2. 仮想マシンを作成(その他の2.6x Linux(64-bit)、メモリ:512MB、NICにE1000、HDD:8GBで。)
  3. 仮想マシンの設定を編集して、ダウンロードしたisoファイルを選択。パワーオン時に接続もチェック
  4. 起動させる

すると、インストーラ・・・は無し!?
けど、Gentoo Linux AMD64 ハンドブックで丁寧に解説されてた。

基本的に、このハンドブック通りやっただけだけど、

  1. net-setup eth0
    で、ネットワーク設定。試しに
    ping -c 1 www.google.co.jp
  2. HDDのパーティション設定。これもハンドブック通り設定した。
    その結果が↓。
    livecd ~ # fdisk -l /dev/sda
    Disk /dev/sda: 8589 MB, 8589934592 bytes
    255 heads, 63 sectors/track, 1044 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Disk identifier: 0x9de52b64
    Device Boot      Start         End      Blocks   Id  System
    /dev/sda1               1           5       40131   83  Linux
    /dev/sda2               6          71      530145   82  Linux Swap
    /dev/sda3              72        1044     7815622+  83  Linux
  3. ファイルシステム生成 and マウント
    # mke2fs /dev/sda1
    # mkswap /dev/sda2
    # swapon /dev/sda2
    # mkfs.ext4 /dev/sda3# mount /dev/sda3 /mnt/gentoo
    # mkdir /mnt/gentoo/boot
    # mount /dev/sda1 /mnt/gentoo/boot
  4. 時間設定
    # ntpdate aaa.bbb.ccc.ddd
  5. stage-tarballダウンロード and 展開
    # cd /mnt/gentoo
    # links http://ftp.jaist.ac.jp/pub/Linux/Gentoo/releases/amd64/current-iso/
    stage3-amd64-20100121.tar.bz2 と stage3-amd64-20100121.tar.bz2.DIGESTS をダウンロード
    # md5sum -c stage3-amd64-20100121.tar.bz2.DIGESTS
    stage3-amd64-20100121.tar.bz2: OK
    ・・・
    # tar jxvfp stage3-amd64-20100121.tar.bz2
  6. Portageのダウンロードと展開
    # links http://ftp.jaist.ac.jp/pub/Linux/Gentoo/snapshots/
    から、portage-latest.tar.bz2 と portage-latest.tar.bz2.md5sum をダウンロード
    # md5sum -c portage-latest.tar.bz2.md5sum
    portage-latest.tar.bz2: OK
    # tar xvjf portage-latest.tar.bz2 -C /mnt/gentoo/usr
  7. Portageの設定
    # nano etc/make.conf
    のCFLAGS と CXXFLAGSに「-march=core2」を追加
    # mirrorselect -i -o >> /mnt/gentoo/etc/make.conf
  8. その他設定
    # cp -L /etc/resolv.conf /mnt/gentoo/etc/
    # mount -t proc none /mnt/gentoo/proc
    # mount -o bind /dev /mnt/gentoo/dev
  9. chrootする
    # chroot /mnt/gentoo /bin/bash
    # env-update
    >> Regenerating /etc/ld.so.cache…
    # source /etc/profile
  10. Portageの更新
    # emerge –sync
  11. localeの設定
    # nano /etc/locale.gen
    で、「ja_JP.UTF-8」を有効にする
    # locale-gen
  12. 時間設定
    # cp /usr/share/zoneinfo/Japan  /etc/localtime
  13. カーネルソース取得 and コンパイル
    # USE=”-doc symlink” emerge gentoo-sources
    # cd /usr/src/linux
    # make menuconfig
    で、カーネルの設定した後、コンパイル
    # make && make modules_install
    コンパイル終わったら、/boot配下にコピー
    # cp arch/x86_64/boot/bzImage /boot/kernel-`uname -r`
  14. fstab設定
    #  nano /etc/fstab
    設定した結果↓。
    ・・・
    /dev/sda1               /boot           ext2            noatime 1 2
    /dev/sda3               /               ext4            noatime         0 1
    /dev/sda2               none            swap            sw              0 0
    ・・・
  15. ホスト名設定
    # nano /etc/conf.d/hostname
    HOSTNAME=”gentoo”
  16. ネットワーク設定
    # emerge dhcp
    # nano /etc/conf.d/net
    ↓追加。
    modules=(“dhclient”)
    config_eth0=(“dhcp”)
    # rc-update add net.eth0 default
    # rc-update add sshd default
  17. rootパスワード設定
    # passwd
  18. ブートローダーインストール and 設定
    # emerge grub
    # cat /boot/grub/grub.conf
    default 0
    timeout 30
    splashimage=(hd0,0)/boot/grub/splash.xpm.gztitle=Gentoo Linux 2.6.31
    root (hd0,0)
    kernel /boot/kernel-2.6.31-gentoo-r10 root=/dev/hda3

    # grub-install –no-floppy /dev/sda
    # reboot

すると・・・「Unable to mount root fs on unknown-block」って言われてKERNEL PANICになる。
しばらく悩んだ後、ルートをext4にしたのが不味かったのかと思って、kernelのオプションに、rootfstype=ext4を追加しても効果なし。

こういうときは、ググるしか無いってことで、ググったら以下がヒット。

VMwareにGentoo

なんでもカーネルのコンフィグが必要だとか。

VMware Guest – Gentoo Linux Wiki

を参考に、

# mount /dev/sda3 /mnt/gentoo
# mount /dev/sda1 /mnt/gentoo/boot
# chroot /mnt/gentoo /bin/bash
# env-update
# source /etc/profile
# cd /usr/src/linux
# make menuconfig

で設定した後、

# make && make modules_install

でビルドして

# cp arch/x86_64/boot/bzImage /boot/kernel-`uname -r`

カーネルをコピー。で、再起動すると、KERNEL PANICにならず起動できた。

ちゃんと情報集めしてからインストールするんだった。。

カテゴリー: VM | タグ: , | コメントする

VMware ESXi 4.0の仮想マシンをショートカットで起動

この記事は2年以上前に書いたものです。
そのため情報が古い可能性があります。ご了承ください。m(_ _)m

VMWare Server 2.0だと、「Generate Virtual Machine Shortcut」で、仮想マシンのショートカットがデスクトップに作成されるけど、「VMware vSphere Client」には、Generate・・・相当が見つけられなかった。

で、あちこち探してた所

VMware Communities: Web Access

の「Using the remote console directly」辺りに記載されていた。FireFoxのプラグインを使う方法だけど、「VMware vSphere Client」に付いてくるvmware-vmrc.exeにも適用できた。

↓こんな感じ。

C:\Program Files\VMware\Infrastructure\Virtual Infrastructure Client\4.0\vmware-vmrc.exe -h ホスト -u ユーザ名 -p パスワード “[データストア名] vmxファイルへのパス”

ESXiのホストが、host、データストア名がbootHDDの場合で、仮想マシン名が、WindowsXPの場合は、↓こんな感じになると思う。

C:\Program Files\VMware\Infrastructure\Virtual Infrastructure Client\4.0\vmware-vmrc.exe -h host -u username -p passwd “[bootHDD] WindowsXP/WindowsXP.vmx"

↑これをショートカットとして作成すれば、「VMware vSphere Client」起動して、仮想マシン選択して~。っていう手間が省ける

-u username -p passwdを省略すると、起動時に認証ダイアログが表示される。ユーザ名だけ指定するような事は出来ないっぽい。

カテゴリー: サーバ管理 | タグ: , , , , | コメントする

KURO-SHEEVA(玄芝)に関する情報集め

この記事は2年以上前に書いたものです。
そのため情報が古い可能性があります。ご了承ください。m(_ _)m

まだまだ情報収集中。。

  1. 玄人志向 – ケース関連/玄箱 » 玄箱 » KURO-SHEEVA
    1. 玄人志向 – Help Me BBS 玄箱 » KURO-SHEEVA
    2. 【玄柴】KURO-SHEEVA情報交換の場
  2. SheevaPlug Dev Kit
  3. PlugComputer Community
    1. General Information
    2. The Plug Computer Forum – Index
      1. MMC/SD support in u-boot
    3. PlugWiki
    4. Remository
  4. タグ一覧 SheevaPlug|gihyo.jp … 技術評論社
    1. Ubuntu Weekly Recipe:第69回 GW特別企画・電源プラグ型コンピューターSheevaPlugの使い方(1):基礎編
    2. Ubuntu Weekly Recipe:第70回 GW特別企画・電源プラグ型コンピューターSheevaPlugの使い方(2):インストール編
    3. Ubuntu Weekly Recipe:第101回 玄柴(KURO-SHEEVA)ファーストインプレッション
  5. SheevaPlug / 玄柴(KURO-SHEEVA)をハックしよう
    1. 不要な getty を止める (SheevaPlug / 玄柴(KURO-SHEEVA)をハックしよう)
  6. sheevaplug/memo – rocky’s wiki
    1. 初期設定みたいなもの
    2. u-bootにバグがあるので書き換え(プランB、SDカードから起動)
  7. SheevaPlug の所感と今までのまとめ « Yu’s Blog
  8. SheevaPlug – PukiWiki
    1. SheevaPlug/JTAG-UART – PukiWiki
    2. SheevaPlug/NAND_Flash – PukiWiki
    3. クロスコンパイル/SheevaPlug_DevKits – PukiWiki
  9. SheevaPlug(2ch)
カテゴリー: KURO-SHEEVA | タグ: , , , , , , , , , , , , , | 2件のコメント