Author Archives: admin

マニフェストとVirtualStore

VC2005Expressだとデフォルトで以下のリンカオプションになる

VC2008Expressだとデフォルトで以下のリンカオプションになる

2008以降のリンカは /MANIFESTがあるとデフォルトでUACのレベルがasInvokerになる。manifestでUACが指定されていればVirtual Storeが働かなくなる。
/MANIFESTUACは2008から追加されたオプション。
/MANIFESTFILEはリンカが出力するファイル。
manifestは実行ファイルのリソース(RT_MANIFEST)に追加される。

ではVSのプロジェクト設定のマニフェストツールとは何か
ビルドログを見るとmt.exeはリンカの後に実行されている。

link.exeが終わった後にmt.exeが実行されており、以下のオプションで実行されていることがわかる。

/manifestで指定されたファイル(.\Release\def2eight.exe.intermediate.manifest)を..\Release\def2eight.exeのRT_MANIFESTに埋め込んでいるんだと思われる。def2eight.exe.intermediate.manifestはリンカがはいたファイル。#1はRT_MANIFEST配下のオーディナル番号だろう。

よくわからないがリンカはリソースにマニフェストを埋め込む機能はなくmt.exeがそれをやっているということか。

最後に自身のプロセスがVirtual Store有効になっているかどうかはプロセスのトークンがTokenVirtualizationEnabledを持っているかでわかる。前にも書いたようにマニフェストでUACレベルを設定していればこれは無効になる。VS2008で作ったアプリはデフォルトで無効になる。VS2005ではUACレベルが設定されていないので有効になる。それ以前のアプリはマニフェストがそもそもないので有効になる。

VC# 2005 2008 express でx86 x64ビルドする

1、ツール→オプションを開く
2、左下の、すべての設定を表示をチェック
3、左でプロジェクトおよびソリューションを選択
4、右でビルド構成の詳細を表示をチェック
5、OKで閉じる
6、ビルド→構成マネージャを開く
7、プラットフォームコラムから新規作成を選択しx86またはx64を選ぶ
565f7014-e7e2-4a44-9cf1-26a4b84488ec

mozbuid

参考
https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions/Windows_Prerequisites

ビルド環境
XP SP3 32bit
VC2010 Express

まずこれを実行
cad07c25-abee-4821-bb72-b45e2925bc4c

start-shell-msvc2010.bat を実行

これは環境変数を設定した後mingwを起動するようだ。

mingwではドライブ名が/c/みたいになる。ここにソースを置く

ソースを取ってくる。時間がかかる。hgはMercurialというSCMツール

失敗してるのでもう一回

ビルド

最初に設定ファイルを作るみたいなのでもう一回

エラー

SDKがないというエラー、–disable-gamepadをやれば回避できるらしいのでmozconfigファイルを作成して追加。

c:/mozilla-build/mozmake/mozmake.EXE -f client.mkから実行しろといわれてるので実行

d3dcompiler.hがないという・・・仕方ないのでJune 2010 DirectX SDK をインストール。

C:\Program Files\Microsoft DirectX SDK (June 2010)\Include\D3Dcompiler.hがあることを確認。

start-shell-msvc2010.batの下のほうにインクルードディレクトリを追加。

start-shell-msvc2010.batを実行してパスを確認。

途中でこんなのが出た。

やっと終わった

489分かかった。mach runしろとのことなので実行

1998c2d0-1f12-42f4-a3cb-8155eae97389

途中で出たVSサポートのビルドをしてみる

.slnができたのでVC2010で開いてみる。いくつかのプロジェクトが読み込めなかった。Expressのせいだろうか。
F11を押してデバッグ。ビルドせずに実行した。
93f40675-cc0a-4e27-93a1-a673bdeb5e14

感想:
ビルドに時間がかかりすぎた。仮想環境で作業しながらだったが実記でやったほうがいいかもしれない。

WindowsのActive Setup

レジストリキー
HKEY_CURRENT_USER\Software\Microsoft\Active Setup\Installed Components
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed Components

ユーザログオン時、HKLMの方をチェックし、それと同一のエントリーがHKCUになければコピーする。StubPathが設定されている場合はこれを実行する。

ユーザごとにログオンしたとき何かをセットアップしたい場合にはここに記述できる。

BeginInvokeとスレッド

.netのBeginInvokeにはデリゲート標準とコントロールの実装があるのでわかりずらいので整理

・delegateのBeginInvoke
BeginInvokeは非同期で実行する。登録できる関数は1個で2個以上だと例外が発生する。関数は別スレッドで実行される。

・ControlのBeginInvoke
ControlのBeginInvokeはWin32のPostMessageみたいなもので別スレッドでは実行しない。一般的にControlはそれを作ったスレッドしか触れないのでマルチスレッドで別スレッドからcontrolにアクセスするときは使う。PostMessageとは言っても引数を渡したり、あとで待ったりできるので高機能。

Form1.cs

Form2.cs

Class1.cs

form1は別スレッドでform2を作る。_f2にはform1のスレッドからは触れないのでBeginInvokeまたはInvokeを呼ぶことになる。関数はForm1にあってもいい。InvokeRequiredを使えば、Invokeが必要か判断できる。ただし多用すると、簡単にデッドロックになるだろう。このソースは本来form2を作るときもっと慎重にやらないとならないがスルーしてる。

vc2010 outdir targetdirが違うと怒られる

以前のプロジェクト設定でリンカーの出力を標準とは違う場所にしていると怒られるようだ。

一般設定の出力場所を設定して、リンカーの方は標準にもどせばいい。

ただここにフルパスを指定したい場合は最後を\\と\を2つければならないみたいだ

boostライブラリのファイル名

Windowsの場合の話(オリジナル

libboost_regex-vc71-mt-d-1_34.lib

lib
これ自体がstaticライブ来の場合つく

boost_regex
ライブラリの名前

vc71
ビルドするのに使ったツール

mt
マルチスレッドサポートありでビルド

d
dのほかにいくつかある。以下参照
s linking statically to the C++ standard library and compiler runtime support libraries.
g using debug versions of the standard and runtime support libraries.
y using a special debug build of Python.
d building a debug version of your code.7
p using the STLPort standard library rather than the default one supplied with your compiler.
n using STLPort’s deprecated “native iostreams” feature.8

s
標準ライブラリをスタティックリンクしている
g
デバッグバージョンのランタイムライブラリでリンクしている
y
よくわからないがパイソンのデバッグビルドでリンクしている
d
これ自体がデバッグバージョンのビルド
p
STLPortを使ってビルドしている
n
STLPortのdeprecatedなnative iostreamsでビルドしている

ここには何もつかない場合もある、普通は何もつかないかgdがつくと思われる。

1_34
バージョンナンバー
これがつくのとつかないの同じファイルができるようだが、本来Linuxのシンボリックリンクだと思われる。Windowsの場合はどっちもファイルの実体のようだ