2008年07月15日
EeePCハンドブックを購入
購入して2日、EeePCに愛着を感じてきております。(やばい?)
ネットを探すと、EeePCを改造したり、改善する方法等、
興味をそそる情報が多くありました。
(でも改造するところまでは、ちょっと、、できません。)
その中で、私が一番欲しいと感じていた画面サイズ変更。
調べてみると1024×768でも表示ができるという事で、
ネットで情報を仕入れて早速実施しました。キーワードは[AsTrayPlus]
(これをインストールした為か、800×600ができなくなりました。)
そして、、本が売られている事も知り、早速購入です。
「EeePCハンドブック Windowsモデル対応版 」
これを読めば大体はできてしまいそう(必需品かも)
1024×768の表示は、7インチには正直きついです。
ちょっと実用的でないと感じました。
一見するとよさそうですが、7インチでは正直見づらくて、
目が疲れてしまいます。↓これです(クリックで拡大)。
けれど、YAHOOを見る時には、ボタンの表示ができるので、
時と場合によって切り分けて使うのが良いんでしょうね。
結論として、通常使用では、800×480あたりがよろしいかと。
最後に、、、こんなことができるのは、
ネットで公開してくれた方たちのおかげだと感謝です。
ネット社会なんだなとしみじみ実感です。
ネットを探すと、EeePCを改造したり、改善する方法等、
興味をそそる情報が多くありました。
(でも改造するところまでは、ちょっと、、できません。)
その中で、私が一番欲しいと感じていた画面サイズ変更。
調べてみると1024×768でも表示ができるという事で、
ネットで情報を仕入れて早速実施しました。キーワードは[AsTrayPlus]
(これをインストールした為か、800×600ができなくなりました。)
そして、、本が売られている事も知り、早速購入です。
「EeePCハンドブック Windowsモデル対応版 」
これを読めば大体はできてしまいそう(必需品かも)
1024×768の表示は、7インチには正直きついです。
ちょっと実用的でないと感じました。
一見するとよさそうですが、7インチでは正直見づらくて、
目が疲れてしまいます。↓これです(クリックで拡大)。
けれど、YAHOOを見る時には、ボタンの表示ができるので、
時と場合によって切り分けて使うのが良いんでしょうね。
結論として、通常使用では、800×480あたりがよろしいかと。
最後に、、、こんなことができるのは、
ネットで公開してくれた方たちのおかげだと感謝です。
ネット社会なんだなとしみじみ実感です。
2008年07月13日
100円パソコン(EeePC 4G-X)
EMOBILEで、スーパーライトデータプラン にねんMAX で、
新規契約することで、Eee PC 4G-XとD02HWが100円で
購入できました。(そしてそのPCでこのブログを書いております。)
実際にかかる費用は、契約事務手数料2,835円(初回のみ)と
毎月2,900円~6,880円(上限)です。
2,900円には、1,000円分の無料通信分が含まれているとの事ですが、
今のネット環境は、YAHOOのサイト等、FLASHばりばり使っている所へ
2回アクセスすれば、無料通信分はなくなってしまうとの事です。
(ちゃんと使うつもりなら)6,880円は覚悟するべきなんですね。
今のご時世、会社へ持ち込んで使用する事はできません。
それでも、今回、購入しようと考えた理由は、魅力的な安さを感じたから。
こんな事があるのは、きっとiPhoneが発売されたおかげなんじゃないかと
思っています。
(
同じお店でiPhoneを実際に手に取って見てみました。画像を拡大したり
スライドさせたり、縦から横にしたら表示も切り替わりました。
使った第一印象はホントに欲しいと思いました。やっぱりアップルという
操作性の良さ、スタイル、私の携帯もSoftBankだし、8月で丸2年だし、
購入してしまおうかと迷ったくらいです。(その時、残り在庫3台のみ)
でも、、、、ねぇ。
毎月の価格がねぇ、、8,000円台だとね。かみさんがNGを出します。
)
EMOBILEは、私にとっては渡りに舟でした。今まで欲しかったノートPCが
100円で買えるし、毎月の支払いは私の小遣いならばとOKしてくれたのですから。
このPCが普通のノートPCでない点、
それはハードディスクが付いていない事です。
その代用としてフラッシュメモリ4Gが用意されてます。(少ないです)
店員さんもソフトをどんどん入れて使うものではないですよと
言っておりました。
(店頭に置いていたEeePCは残り空き容量が320Mでした。)
私は、メールを取ったりする事はそのPCではやらないと決め、
ネットサーフィン位ができれば良いと思う事にしました。
そこで、私が良く利用しているYAHOO動画等を確認してみようと
思いたち、試させてもらいました。
試して思った事は、画面サイズが小さいという事。
LCDの画面サイズが800×480か800×600しか選べないので、
音の調節ボタンをうまく押す事ができませんでした。
(下に消えてしまって押せない)
ちょっと残念に思いましたが、動画がそれなりに再生できる事がわかり、
安心して決定です。
購入してわかりましたが、マウスと4GのSDHCメモリーカードが
標準でついてました。
自宅の回線にて、動画サイトがアクセスできるかを確認。
・GYAO(再生OK、安心して見れました)
・ニコニコ動画(弾幕OKでした。)
せっかくなので、性能評価(HDBENCH)
CPU-Z
これは開発環境が動くか確認してみた所です。結果はOKです。
メモリー常駐
Cドライブが、フラッシュメモリの4Gで、OSがインストールされます。
Dドライブは、増設ドライブとしてSDカードが差し込めるようになってます。
そこで、付属していたメモリーカード4Gに、C++Builder6の開発環境を入れました。また、Cドライブに、OpenOffice、圧縮・解凍ツール、エディタ、ウイルスソフト等をインストール。
結果、フラッシュ4Gの残りは約800Mとなってしまいました。
でも使ってみての感想は、、、、こいつ!、できがいいぞー!!!。
VISTAは無理でも普通のXPなら、なんら変わりがないです。
100円で、モバイル環境が整うなんて、ほんとにあり得るんですね。
新規契約することで、Eee PC 4G-XとD02HWが100円で
購入できました。(そしてそのPCでこのブログを書いております。)
実際にかかる費用は、契約事務手数料2,835円(初回のみ)と
毎月2,900円~6,880円(上限)です。
2,900円には、1,000円分の無料通信分が含まれているとの事ですが、
今のネット環境は、YAHOOのサイト等、FLASHばりばり使っている所へ
2回アクセスすれば、無料通信分はなくなってしまうとの事です。
(ちゃんと使うつもりなら)6,880円は覚悟するべきなんですね。
今のご時世、会社へ持ち込んで使用する事はできません。
それでも、今回、購入しようと考えた理由は、魅力的な安さを感じたから。
こんな事があるのは、きっとiPhoneが発売されたおかげなんじゃないかと
思っています。
(
同じお店でiPhoneを実際に手に取って見てみました。画像を拡大したり
スライドさせたり、縦から横にしたら表示も切り替わりました。
使った第一印象はホントに欲しいと思いました。やっぱりアップルという
操作性の良さ、スタイル、私の携帯もSoftBankだし、8月で丸2年だし、
購入してしまおうかと迷ったくらいです。(その時、残り在庫3台のみ)
でも、、、、ねぇ。
毎月の価格がねぇ、、8,000円台だとね。かみさんがNGを出します。
)
EMOBILEは、私にとっては渡りに舟でした。今まで欲しかったノートPCが
100円で買えるし、毎月の支払いは私の小遣いならばとOKしてくれたのですから。
このPCが普通のノートPCでない点、
それはハードディスクが付いていない事です。
その代用としてフラッシュメモリ4Gが用意されてます。(少ないです)
店員さんもソフトをどんどん入れて使うものではないですよと
言っておりました。
(店頭に置いていたEeePCは残り空き容量が320Mでした。)
私は、メールを取ったりする事はそのPCではやらないと決め、
ネットサーフィン位ができれば良いと思う事にしました。
そこで、私が良く利用しているYAHOO動画等を確認してみようと
思いたち、試させてもらいました。
試して思った事は、画面サイズが小さいという事。
LCDの画面サイズが800×480か800×600しか選べないので、
音の調節ボタンをうまく押す事ができませんでした。
(下に消えてしまって押せない)
ちょっと残念に思いましたが、動画がそれなりに再生できる事がわかり、
安心して決定です。
購入してわかりましたが、マウスと4GのSDHCメモリーカードが
標準でついてました。
自宅の回線にて、動画サイトがアクセスできるかを確認。
・GYAO(再生OK、安心して見れました)
・ニコニコ動画(弾幕OKでした。)
せっかくなので、性能評価(HDBENCH)
CPU-Z
これは開発環境が動くか確認してみた所です。結果はOKです。
メモリー常駐
Cドライブが、フラッシュメモリの4Gで、OSがインストールされます。
Dドライブは、増設ドライブとしてSDカードが差し込めるようになってます。
そこで、付属していたメモリーカード4Gに、C++Builder6の開発環境を入れました。また、Cドライブに、OpenOffice、圧縮・解凍ツール、エディタ、ウイルスソフト等をインストール。
結果、フラッシュ4Gの残りは約800Mとなってしまいました。
でも使ってみての感想は、、、、こいつ!、できがいいぞー!!!。
VISTAは無理でも普通のXPなら、なんら変わりがないです。
100円で、モバイル環境が整うなんて、ほんとにあり得るんですね。
2008年07月07日
VCのDLLをC#から呼び出すには
VCで作られたDLLを、C#から参照したいときの方法。
構造体をやり取りすると想定して、
その場合の方法は以下のとおり。
--------------------------------------------------------------------------
VC側(DLLとなる側)
--------------------------------------------------------------------------
// 構造体を仮定
typedef struct typstrData{
char strMsg[256];
int sw;
char strStok[128];
int sw2;
}TYPESDATA;
// dll側の領域
static TYPESDATA stockdt[5];
static int stockidx=0;
// DLL側関数の例として以下のような2関数を用意していたとする
// データをDLL側に渡す関数(stock_pushd)
int WINAPI stock_pushd(TYPESDATA *psetdt)
{
if( 4<stockidx) return -1;
memcpy(&stockdt[stockidx++],
psetdt,sizeof(TYPESDATA));
return stockidx;
}
// DLL側からデータを受け取る関数(stock_popd)
int WINAPI stock_popd(TYPESDATA *psetdt)
{
if( 0==stockidx) return -1;
memcpy(psetdt,&stockdt[--stockidx],sizeof(TYPESDATA));
return stockidx+1;
}
--------------------------------------------------------------------------
C#側
--------------------------------------------------------------------------
using System;
using System.Runtime.InteropServices;
namespace TestCSharp
{
// C#側プログラムで実際に使用するデータ用クラス
public class csData
{
public string message;
public int sw1;
public string Stock;
public int sw2;
public csData(){
message = string.Empty;
sw1=0;
Stock=string.Empty;
sw2=0;
}
}
// C#側で、DLLとやり取りを行うクラス
public class testdllApi
{
//----------------------------------------------------------
//構造体定義
//----------------------------------------------------------
// typedef struct typstrData
// {
// char strMsg[256];
// int sw;
// char strStok[128];
// int sw2;
// }TYPESDATA;
// この構造体と同じレイアウトにするには以下のような記述
[StructLayout(LayoutKind.Sequential)]
public struct dll_TYPESDATA
{
[MarshalAs(UnmanagedType.ByValTStr,
SizeConst = (int)256)]
public string strMsg;
public int sw;
[MarshalAs(UnmanagedType.ByValTStr,
SizeConst = (int)128)]
public string strStok;
public int sw2;
}
//----------------------------------------------------------
// 関数定義
//----------------------------------------------------------
// DLL側の関数を使用できるように定義
[System.Runtime.InteropServices.DllImport("testdll.dll")]
public static extern System.Int32
stock_pushd(ref dll_TYPESDATA psetdt);
[System.Runtime.InteropServices.DllImport("testdll.dll")]
public static extern System.Int32
stock_popd(ref dll_TYPESDATA psetdt);
//----------------------------------------------------------
public testdllApi() { /* コンストラクタ */ }
// C#側ではこのメソッドを使用する(pushd)
public int pushd(csData pdt)
{
dll_TYPESDATA dt = new dll_TYPESDATA);
dt.strMsg = pdt.message;
dt.sw = pdt.sw1;
dt.sw2 = pdt.sw2;
dt.strStok = pdt.Stock;
int nans = stock_pushd(ref dt);
return nans;
}
// C#側ではこのメソッドを使用する(popd)
public int popd(ref csData pdt)
{
dll_TYPESDATA dt = new dll_TYPESDATA();
int nans = stock_popd(ref dt);
pdt.message = dt.strMsg ;
pdt.sw1 = dt.sw;
pdt.sw2 = dt.sw2;
pdt.Stock = dt.strStok;
return nans;
}
}
}
構造体をやり取りすると想定して、
その場合の方法は以下のとおり。
--------------------------------------------------------------------------
VC側(DLLとなる側)
--------------------------------------------------------------------------
// 構造体を仮定
typedef struct typstrData{
char strMsg[256];
int sw;
char strStok[128];
int sw2;
}TYPESDATA;
// dll側の領域
static TYPESDATA stockdt[5];
static int stockidx=0;
// DLL側関数の例として以下のような2関数を用意していたとする
// データをDLL側に渡す関数(stock_pushd)
int WINAPI stock_pushd(TYPESDATA *psetdt)
{
if( 4<stockidx) return -1;
memcpy(&stockdt[stockidx++],
psetdt,sizeof(TYPESDATA));
return stockidx;
}
// DLL側からデータを受け取る関数(stock_popd)
int WINAPI stock_popd(TYPESDATA *psetdt)
{
if( 0==stockidx) return -1;
memcpy(psetdt,&stockdt[--stockidx],sizeof(TYPESDATA));
return stockidx+1;
}
--------------------------------------------------------------------------
C#側
--------------------------------------------------------------------------
using System;
using System.Runtime.InteropServices;
namespace TestCSharp
{
// C#側プログラムで実際に使用するデータ用クラス
public class csData
{
public string message;
public int sw1;
public string Stock;
public int sw2;
public csData(){
message = string.Empty;
sw1=0;
Stock=string.Empty;
sw2=0;
}
}
// C#側で、DLLとやり取りを行うクラス
public class testdllApi
{
//----------------------------------------------------------
//構造体定義
//----------------------------------------------------------
// typedef struct typstrData
// {
// char strMsg[256];
// int sw;
// char strStok[128];
// int sw2;
// }TYPESDATA;
// この構造体と同じレイアウトにするには以下のような記述
[StructLayout(LayoutKind.Sequential)]
public struct dll_TYPESDATA
{
[MarshalAs(UnmanagedType.ByValTStr,
SizeConst = (int)256)]
public string strMsg;
public int sw;
[MarshalAs(UnmanagedType.ByValTStr,
SizeConst = (int)128)]
public string strStok;
public int sw2;
}
//----------------------------------------------------------
// 関数定義
//----------------------------------------------------------
// DLL側の関数を使用できるように定義
[System.Runtime.InteropServices.DllImport("testdll.dll")]
public static extern System.Int32
stock_pushd(ref dll_TYPESDATA psetdt);
[System.Runtime.InteropServices.DllImport("testdll.dll")]
public static extern System.Int32
stock_popd(ref dll_TYPESDATA psetdt);
//----------------------------------------------------------
public testdllApi() { /* コンストラクタ */ }
// C#側ではこのメソッドを使用する(pushd)
public int pushd(csData pdt)
{
dll_TYPESDATA dt = new dll_TYPESDATA);
dt.strMsg = pdt.message;
dt.sw = pdt.sw1;
dt.sw2 = pdt.sw2;
dt.strStok = pdt.Stock;
int nans = stock_pushd(ref dt);
return nans;
}
// C#側ではこのメソッドを使用する(popd)
public int popd(ref csData pdt)
{
dll_TYPESDATA dt = new dll_TYPESDATA();
int nans = stock_popd(ref dt);
pdt.message = dt.strMsg ;
pdt.sw1 = dt.sw;
pdt.sw2 = dt.sw2;
pdt.Stock = dt.strStok;
return nans;
}
}
}
2008年07月06日
RAD Studio EXE配布
ついつい忘れてしまうEXE配布時、単体動作可能にするオプション設定。
1.プロジェクト - オプションにて設定ダイアログを表示。
2.設定箇所は2つ
①リンカ - リンク - 動的RTL のチェックをはずす。
②パッケージ - パッケージ再構築 - 実行時パッケージを使って構築のチェックをはずす。
1.プロジェクト - オプションにて設定ダイアログを表示。
2.設定箇所は2つ
①リンカ - リンク - 動的RTL のチェックをはずす。
②パッケージ - パッケージ再構築 - 実行時パッケージを使って構築のチェックをはずす。
2008年07月05日
CString のメモリーリーク
VC6の話です。
Dumping objects ->
strcore.cpp(118) : {522} normal block .....
Data: < 007 > 01 00 00 00 03 00 00 00 04 00 00 00
30 30 37 00
Object dump complete.
strcore.cpp(118) というメモリーリークの内容
何度か試して同じ522だったので、theAppのコンストラクタに、
_CrtSetBreakAlloc(522)を挿入しデバッグを行いました。
最初にとまったのは、_heap_alloc_dbgという関数でした。
これではわからないので、呼び出し元をたどります。
コールスタックで上にさかのぼっていくと、
strcore.cppの118行目に次のような記述があります。
pData = (CStringData*) new
BYTE[sizeof(CStringData) + (nLen+1)*sizeof(TCHAR)];
さらにさかのぼると処理は、次のような所に到達しました。
CString& CString::operator=(LPCTSTR lpsz)
この上をたどると、メモリーリークしている所に到達しました。
該当箇所は、ただ単純に CString型 = char*型している所でした。。。
CString型は扱いが厄介に感じます。
そこで、こうすればメモリーリークになるのではと
考えている事を書きたいと思います。
(注)もちろん私の勝手な見解です。根拠はありません。
1.CString型の関数を作った時。
CString hoge()等、関数の型にした時、発生した覚えがあります。
[対応]基本的に作らないようにしています。
2.スレッドを利用している時。
スレッドの終了のタイミングと関連があると感じています。
[対応]スレッド内のローカル変数や引数で渡したCString型のものは、
スレッドが終わる前に[変数名].Empty() でクリアします。
3.クラスメソッドや構造体でCString型変数を再設定する時。
パラメータ設定用メソッドと実行メソッドを別にしたクラスで、
設定メソッドにCString型の変数を渡していた場合や、
構造体内のCString型変数に対して、繰り返し設定し使用した場合。
[対応]設定前に、[変数名].Empty()を行い、再設定します。
基本的にメモリーリークが増えなければ良いという考えもあると思います。
でも、、気持ち悪いので調べて納得して結論を出すべきと思います。
Dumping objects ->
strcore.cpp(118) : {522} normal block .....
Data: < 007 > 01 00 00 00 03 00 00 00 04 00 00 00
30 30 37 00
Object dump complete.
strcore.cpp(118) というメモリーリークの内容
何度か試して同じ522だったので、theAppのコンストラクタに、
_CrtSetBreakAlloc(522)を挿入しデバッグを行いました。
最初にとまったのは、_heap_alloc_dbgという関数でした。
これではわからないので、呼び出し元をたどります。
コールスタックで上にさかのぼっていくと、
strcore.cppの118行目に次のような記述があります。
pData = (CStringData*) new
BYTE[sizeof(CStringData) + (nLen+1)*sizeof(TCHAR)];
さらにさかのぼると処理は、次のような所に到達しました。
CString& CString::operator=(LPCTSTR lpsz)
この上をたどると、メモリーリークしている所に到達しました。
該当箇所は、ただ単純に CString型 = char*型している所でした。。。
CString型は扱いが厄介に感じます。
そこで、こうすればメモリーリークになるのではと
考えている事を書きたいと思います。
(注)もちろん私の勝手な見解です。根拠はありません。
1.CString型の関数を作った時。
CString hoge()等、関数の型にした時、発生した覚えがあります。
[対応]基本的に作らないようにしています。
2.スレッドを利用している時。
スレッドの終了のタイミングと関連があると感じています。
[対応]スレッド内のローカル変数や引数で渡したCString型のものは、
スレッドが終わる前に[変数名].Empty() でクリアします。
3.クラスメソッドや構造体でCString型変数を再設定する時。
パラメータ設定用メソッドと実行メソッドを別にしたクラスで、
設定メソッドにCString型の変数を渡していた場合や、
構造体内のCString型変数に対して、繰り返し設定し使用した場合。
[対応]設定前に、[変数名].Empty()を行い、再設定します。
基本的にメモリーリークが増えなければ良いという考えもあると思います。
でも、、気持ち悪いので調べて納得して結論を出すべきと思います。