忍者ブログ

カウンター

プロモーション

カレンダー

10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

AntinomyMy の実験室

   私のWEBアプリ実験室です!

ブログ内検索

楽天でお買い物

twitter

最新トラックバック

最新コメント

忍者アナライズ

ウェザーニュース

バーコード

本を買う

アクセス解析

Google+

[PR]

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


No Image

Visual C++ 6.0 Processor Pack と Windows 7

VisualC++ 調べ物

 手持ちのN5(コレ↓)にEclipse を入れて必死にPHPの開発をしようとして使っていた。


超小さくて軽いので便利(GPSも内臓!!!)だが、しかし私がしたい事に対して、とても遅いのだ。

Eclipse というJava仮想マシン上で動く統合開発環境を導入して使っているが遅い。

Eclipse はCPUの早いマシンなら凄く便利だが、
なんだかもうAtomのCPUで、その上Windows 7 とメモリが2Gでは、立ち上がるまでが極端に遅い。

勿論インターネットセキュリティーのソフトなども入れれば尚更重くなるに決まっている。
それはとても気が付いていることだけどEclipse をN5 で使うと地獄だ。

結局小さなPCで何処でも時間を余すことなくプログラミングがしたいだけなので、
Eclipse を使いたかったら、毎回立ち上げなくてスタンバイにしておくしかないと思い、
それでも何か、別の軽い開発環境で、プログラミングがしたいなと思った。

なので別の用途にはなるが、Visual C++ 6.0を入れてみたのだ。
 (追伸ですがPHPとXHTMLやJavaScriptはMicrosoft Visual Web Developer 2010 Express や
Notepad++ を使ってます。 PHP エディタも使おうかと思ってますが、
なぜかNotepad++で修正する方が多くて使ってないです、今からインストールしときますw)


なんだこの快適さは!

さて、何時もながらの前置きはこれぐらいにして
動いたVisual C++ 6.0 にサービスパックを入れる
その本題に入ろう。
 

 


本題ですが、なぜこの話題にしたのか、それはVisual Studio 6.0 Service Pack 5 が
Windows 7 に普通に入らないからです。

理由はMDAC(Microsoft Data Access Components) が違うらしい。
エラーの内容は確か、2.5以上のバージョンを入れるか、
何かを使いたいなら2.6以上を入れろ! の様な事が書かれていた記憶がある。

そこで最新であろう、MDAC 2.8 を入れてみた、がしかし同様のエラーが発生する。
なので古いMDAC2.6 を探して入れてみた、やはりエラーが発生する。

なので諦めて、とりあえずネットで最新のService Pack や何かアップデートがないか
調べてみた。

すると普通にVisual Studio 6.0 Service Pack 6 があったのでダウンロード してインストールできた。
とりあず、Service Pack 5 と 6 の違いを調べたところ、
Visual C++ Processor Pack (VCPP) は、SP6 から除外されました。
お客様が既に VCPP をインストールしていた場合、
SP6 をインストールすると、VCPP はお客様のコンピュータから削除されます。
引き続き VCPP を使い続けたい場合は、これまでどおり SP5 を利用するか、
Visual Studio .NET 2002 または 2003 へ移行していただく必要があります
(Visual Studio .NET 2002、2003 への移行を推奨します)。


らしい(Studio 6.0 SP6 に関する情報)より引用。

つまり、なんかVisual Studio 6.0 のサポートも切れているみたいなので、
今のうちに環境を整える状況を作っておかなければ、何年かすると使えなくなるかもしれないと
思った。

なのでそのVCPP(Visual C++ 6.0 Processor Pack) と言うのを調べた。
そうすると、「ProcessorPack 5.0をVisual C++ 6.0 (Service Pack 6)にインストールする
というサイトを見つけた。

このサイトによると、vcpp5 というターゲットを入手して、それにスイッチをつけて
全て展開し、必要な物だけを手動で移すみたいだ。

なぜこんな事をしているのか疑問で、とりあえずダウンロードしてみようとVCPP を探した。
するとvcpp5 という実行ファイルではなく、vcpp という名前の物が追加使用許諾契約書 の同意の上
公式からダウンロードできるのが分かった。
(一応ダウンロードリンク元リンク先です。)_ _

これはなぜ同意の上なのか、分かった気がします。
追加使用許諾契約書 (以下抜粋)に、

注意:
Visual C++ 6.0 Processor Pack は、各国語のシステム向けにローカライズされておりません。Visual C++ 6.0 日本語版での動作確認は完了していますが、コンパイラの一部ファイルが英語版で上書きされるため、インストール後に一部のエラーメッセージや警告が英語で表示されるようになります

とあるので、正式に対応している訳ではなく、とりあえず動くからの様なものみたいです。

それではこれから、どうやってVCPP に対応させるかの
ProcessorPack 5.0をVisual C++ 6.0 (Service Pack 6)にインストールする
Mr.Ohtaさんのページ さん有難う御座います。)
を参考にし、追加で補足のメモをします。
 

 


 

このサイトによると、ダウンロードしたファイルの名前は私の場合は、vcpp であり、
vcpp5 ではなかったので、vcpp /C /T:C:\temp で解凍しました。
そうすると、C:\temp に全て解凍されてものができました。

とりあえず、その解凍したファイルは、普通にVisual C++ 6.0 をインストールしたならば、
VC98\Include と、VC98\Bin に各ファイルにスイッチにより解凍したファイルを追加する、
もしくは同様のファイルがあった場合には、新しい物を用いるとありました。

その後、その解凍したファイルにある、Enabl__1.reg を実行して、レジストリに登録する様です。
同様に、Disab__1.reg というのもあり、これはレジストリの同じ場所を指し示していて、

[HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Debug]
"SIMDRegisters"=dword:00000000


"SIMDRegisters"=dword:00000001
の違いだけでした。(前者0がDesab__1.reg 、後者1がEnabl__1.reg

とりあえずレジストリはイネーブルの1にする様です。


このサイト にはサンプルもあるよ!とのことだったので、
解凍した物を確認してみると、確かにサンプルがありました。

私はサンプルが欲しい!案外マイクロソフトが作るサンプルで育ってきた人なので、
サンプルも欲しいのです。

そこで何か無いかと探したら、
vcpp.inf というセットアップ情報ファイルがありました。

この中を覗くと、中にセットアップする場所の記述があり、そこにどのファイルを保存するかが
書いてありました。

[DestinationDirs]
CopyToVC98Bin=49010,Bin
CopyToVC98Include=49010,Include
CopyToVC98CrtSrc=49010,Crt\Src
CopyToSamplesAmdAsdk=49010,Samples\Amd\Asdk
CopyToSamplesAmdIsdk=49010,Samples\Amd\Isdk
CopyToSamplesCPUID=49010,Samples\CPUID
CopyToMsdev98Bin=49020,Msdev98\Bin
CopyToVC98Masm=49010,Bin
CopyToVC98Root=49010

こんな感じになっていて、該当する例えば、
[CopyToVC98Include]
dvec.h,,,32
fpieee.h,,,32
fvec.h,,,32
ivec.h,,,32
malloc.h,,,32
mm3dnow.h,,,32
mmintrin.h,,,32
emmintrin.h,emmint_1.h,,32
xmmintrin.h,xmmint_1.h,,32


とかが存在して
[CopyToVC98Include]=CopyToVC98Include=49010,Include

ということが分かるようになっていました。

あと、英語になると注意があった訳で、それらは何処にインストールするのか考えてみた。
procpack.chm というヘルプを覘いてみたら、英語だった。
じゃprocpack.chm は何処にインストールするのか調べた。
[CopyToVC98Root]=49010
だった、そしてこのファイルについて、同様の日本語ファイルは私の環境では、
見つからなかった。
もし同様のファイルがあるのなら英語になるってことなんだと思う。

それにしてもRootのフォルダは49010なんだろうか?
とりあえずchmのファイルがあるディレクトリは、私の環境では
C:\Program Files\Microsoft Visual Studio\VB98 (1個だけ)
C:\Program Files\Microsoft Visual Studio\VIntDev98\bin (2個だけ)
C:\Program Files\Microsoft Visual Studio\MSDN98\98VS\1041 (いっぱいあった)
でした。

なので間違っていない様です、まぁ、何かAPIで49010 はルートを示すのかもしれませんし、
内部で使っている値かもしれません。
2進数に直したら、1011111101110010 だったので、いくつかフラグが重なっているかもしれないし、
面倒だったので其処までは調べませんでした。

最後になってしまいましたが、vcpp は
Intel Pentium III インストラクション セット (Streaming SIMD Extensions [SSE])、
Intel Pentium 4 インストラクション セット (Streaming SIMD Extensions 2 [SSE2])、
および AMD 3DNow! インストラクション セットらしいです。

あとアセンブラのMASM も入っています。
コンパイラでアセンブラで書かれた部分はMASM を使うのでしょうか、
多分そんな所なのだと思います。

今使わなくとも使いそうなので何時ものように長ぁーいメモでした。

余談:N5

を入れて使うのが結構楽しかった。GPSはたまに初期化関係がおかしい?が
休止状態とかスリープとかすると治ったりするんだよね。

初期化タイミングでもあるのかな?
ご存知の方はお教え下さい。

                                            余談以上。

追伸:
 Windows 7 にVisual Studio 6.0 を入れて、DOMだったかな?
それらのコンポーネントを使おうとすると、Windows 7 のOS には存在しない機能なども
参照しようとするみたいです、またインストールして一番初めだけDOM の機能を使おうとすると
DOM の機能を使うためのインデックスの作成作業みたいなことを裏で行うみたいなので、
その処理時間の長さが遅いPCではフリーズしたんじゃないか? とか感じると思いますが、
気長にお待ち下さい・・・みたいな感じでしたよ^^;

拍手[0回]

PR

No Image

可変長配列とSTLとテンプレート

VisualC++ 調べ物


- 長い前書き-

 今回は簡単に述べると、可変長配列(variable langth array)は色々な言語で簡単に出来るかどうかの話題である。

 私は未だに言語に依存したプログラミングしか出来ない場合が多い。

 それは勿論言語に特化した便利な関数や書式が用意されていて、
言語の違いによる出来る出来ないや、得意不得意も大いに関係しているが、
その違いを埋められる能力が付くほど、多くの言語に精通していないと言う意味です。

 他の言語を用いると同等の機能が用意されていなかったり、同等なのだと
知るまでに時間がかかったりするからだ、そしてそうやって時間がかかるので
出来たか出来ないか?で考えた場合に、ある言語で出来ることを
無理して実現するのが簡単ではない他の言語で作れていない事になる。

 しかし私は他の言語で同じ挙動や同じ内容のプログラミングが出来るのであれば、
とてつもなく自身の能力が伸びたりする事も重々承知なのである。

 プログラミングに対して先に上手に進めない葛藤を持った事がある人には、
どれだけ上手にしたい事に対しての『情報をスムースに入手出来るか?』が精神衛生上
『プログラミングが気持ちよく長続きするか?』に繋がるのだと思う。

 しかしそれは単純に軽く好きであったり、物事に追われていない人の考える事であると思う、
しかしそれとは私は一線を越えていると思う節がある、私は出来ない事を忘れたり
諦めたりするのがとてつもなく上手ではない、きっと出来なくとも永遠に覚えいて、
そのうち出来る様になる方法や考え方を得るまで精神衛生上良くなくともしつこく覚えている人
なのだと思う。

 何よりも私はお師匠様や、知り合いのプログラマーなど、知りたい事に対して尋ねられる
身近な人は存在しない。Web や本 から何かを得るぐらいしか能力が無い場合が多く、
そしてWeb 上で尋ねられる掲示板があったとしても、上手に気兼ねなく尋ねられるかを考えると
尋ねる事に対して多少躊躇するものであり、現状では結局尋ねた事はない。

 私が使った事のある言語で、配列の大きさが後から後からどんどん変わるので、
配列の大きさを変えて使う事をなんの気も使わないで当たり前に使ってきた。

 たとえばVisual Basic 6.0 で書いたプログラミングで、配列の大きさはReDim ステートメント
用いてPreserve のキーワード を指定すれば、配列の中の情報を残したまま、
同次元の配列であれば、配列の大きさを大きくしたり小さくしたり何も考えなくて出来るのである、
これはプログラミング言語において、可変長配列と言われる物だろうが、
これを意識なくプログラミングが出来る言語と、明らかに意識してなんらかの手順を踏んだ上でしか
プログラミングが出来ない言語がある。
 PHP や、Visual Basic 6.0 などは本当に可変長配列は意識しなくとも配列の大きさを
変えられてしまう。

 しかし、早くそしてOSの能力を生かしたアプリケーションソフトウェアを作りたいと思うと
かなり思考する方向が変わってくる。

 入門レベルや多少使ってみた程度のC++ の能力しかない物が
Visual Basic 6.0 の可変長配列 を用いたプログラミング をC++ を用いて
同様の可変長配列プログラミング をしようとすると、きっと私と一緒で何処から手をつけたら
良いか判らないぐらい、どの機能を用いて実現するのか戸惑うのだと思う。

 他にも意識してか可変長配列を用いるプログラミング言語や、意識しなくても良い言語などは
ある様で、分類の意味でジェネリックプログラミング などを調べれば、類似した言語は出てくるが、
私が知りたいのはまずVisual C++ を用いたプログラミングで C++ の機能について知りたいので、
C++ で可変長配列を用いる方法を調べてメモしたいと思う。


メモその1 C(C++)の規格 C99 からは可変長配列が取り入れられている

 とある本を買わずに中身だけ拝見させて頂いた。
後から中古しかなかったですが買いました。
C言語体当たり学習 徹底入門 (標準プログラマーズライブラリ)
新品が欲しかったのですが、もう売ってないみたいなんです^^;

そこにある事には、C99 の規格のC++ であれば、
構造体や共用体でない、staticの宣言がしていない
関数内のみで可変長配列が宣言出来るそうです。

 しかし、C99(ISOの規格で、ISO/IEC 9899:1999(E) Programming Language--C (Second Edition)
は1999年12月頃に出来た規格であり、私の使うVisual C++ 6.0 は
リリースですら1998年であり対応していない。

 また同様に言い換えるならば、このC99 からの可変長配列は下位互換性は無いので
昔のコンパイラでコンパイルエラーになるので、他のコンパイラを使うならば
互換性の問題で悩まされそうだ。

----- 関数の一例 -----
関数名:var_array
関数引数型:int
関数内部可変長配列名:piece
関数内部可変長配列型:int

void var_array(int x){
    int piece(x);
}

----- ----- -----
こんな感じみたいです。

しかしこの可変長配列は、VBみたいに配列を拡張する方へ大きくする場合に
前に持っていた値を保持する、VBで言う所のReDim ステートメント の
Preserve キーワード を指定した場合には、
既存の配列に格納されている値を失うことなく、配列の最後の次元の要素数を変更する
とあるのですが、この機能の様にONやOFFが出来るかもやってみていないので
不明です。




拍手[0回]


  • Home
[PR]