- PR -

VisualStudio .NET での作成物は全てマネージコードになるのでしょうか?

投稿者投稿内容
hawk32
会議室デビュー日: 2003/06/17
投稿数: 10
投稿日時: 2003-07-04 14:08
こんにちは。みなさん。

現在、VisualStudio .NET 2002(以下、VS.NET)を利用して、
C# で色々なテストプログラムを作成しております。
その際、ふと疑問に思った点についてご相談させて頂きます。


・作成したプログラムは全て .NET Frameworkが提供する
 クラス(System〜)を参照しているので、
 利用するクライアントに .NET Framework がインストール
 されていないと動かない訳ですが、

・こういったマネージコードしか VS.NET は生成出来ない
 製品なのでしょうか?

 VS.NET でアンマネージコードは生成出来ないのでしょうか?


◆マネージコード
 http://www.atmarkit.co.jp/icd/root/18/21224318.html
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-07-04 14:38
引用:

hawk32さんの書き込み (2003-07-04 14:08) より:
 VS.NET でアンマネージコードは生成出来ないのでしょうか?



VS.NETで、というより.NET Frameworkを利用する場合
それはマネージコードになります。

VS.NETでVC++を利用する場合、デフォルトでは.NET Frameworkを
使わない設定になっているかと思います。
この場合、作成されるのはアンマネージコード(というより
ネイティブコード?)になります。

VC++でも.NET Frameworkを利用するようにしてアプリを
作成すれば、マネージコードになりますね。
hawk32
会議室デビュー日: 2003/06/17
投稿数: 10
投稿日時: 2003-07-04 18:54
引用:

小野@EACさんの書き込み (2003-07-04 14:38) より:

VS.NETでVC++を利用する場合、デフォルトでは.NET Frameworkを
使わない設定になっているかと思います。
この場合、作成されるのはアンマネージコード(というより
ネイティブコード?)になります。




情報ありがとうございます。小野さん。

私の方でも Visual C++ や Visual Basic で
色々試してみました。

ご指摘の通り、Visual C++ 用のプロジェクトテンプレート
の「Win32 プロジェクト」などでは、アンマネージコード
として作成出来ました。

引用:

VC++でも.NET Frameworkを利用するようにしてアプリを
作成すれば、マネージコードになりますね。




Visual C++ で「Managed C++ アプリケーション」などを
選べば、.NET Framework を利用したマネージコードが
作成出来るようですね。


若干、主題が変わりますが、
Visual C# ではアンマネージコードは
作成出来るのだろうか?

色々、試してみようと思います。
ありがとうございました。
とし
会議室デビュー日: 2002/08/24
投稿数: 8
投稿日時: 2003-07-05 00:00
_
とし
会議室デビュー日: 2002/08/24
投稿数: 8
投稿日時: 2003-07-05 00:02
unsafe keywordを調べてください。
必ずしも、C#=ManageCodeではないということを理解できると思います。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2003-07-05 01:12
引用:

としさんの書き込み (2003-07-05 00:02) より:
unsafe keywordを調べてください。
必ずしも、C#=ManageCodeではないということを理解できると思います。


マネージコードという言葉ってどうも2つの意味に取れてしまう事があって、
1.CLR上で動作する(ILになっている)コード
2.C#でいうunsafeを使用していないコード

# 1.は Managed C++ とかではちょっと違うんですかね(詳しくないのですみません)。
# 2.は的確ではないかもしれませんが、説明が長くなりそう&うまく出来そうにないので
# こう書きました。

私は、基本的に1.のように、CLR上で動作するものをマネージコードと呼び、
CLRを必要としないこれまでとおりのプログラムをアンマネージコードと呼ぶ感覚でした。
ところが、C#のunsafeの説明には、ポインタを使うコードはアンマネージコードと
書かれており、2.のものもアンマネージコードと呼んでいます。
結局のところ、これら2つの説明が入り乱れており、正確な定義がどちらなのかは
私にはよくわかりません。

で、.NET Framework が必要ないプログラムとか、C++での「Win32 プロジェクト」
を指してアンマネージコードといっている場合は、「C#では作成できない」となりますし、
単にunsafeであるという意味なら、そのとおり unsafe を使用することで出来ます。

ここでのアンマネージは、前者の意味と思いますので「C#ではできない」となります。
hawk32
会議室デビュー日: 2003/06/17
投稿数: 10
投稿日時: 2003-07-07 18:24
なちゃさん、としさん、情報ありがとうございます。

引用:

なちゃさんの書き込み (2003-07-05 01:12) より:

マネージコードという言葉ってどうも2つの意味に取れてしまう事があって、
1.CLR上で動作する(ILになっている)コード
2.C#でいうunsafeを使用していないコード



Microsoft のサイトのサーチエンジンを使用して、
チェックしてみましたが、明確な記述は見つけられ
ませんでした。

Microsoft Japan
MSDN


とりあえず、今回の質問の趣旨的には1番が該当するので、

引用:

で、.NET Framework が必要ないプログラムとか、C++での「Win32 プロジェクト」
を指してアンマネージコードといっている場合は、「C#では作成できない」となりますし、
単にunsafeであるという意味なら、そのとおり unsafe を使用することで出来ます。

ここでのアンマネージは、前者の意味と思いますので「C#ではできない」となります。



と言う事が良く解りました。

C# を実装言語で利用する場合には、
.NET Framework が実行環境で必須という事ですね。

なちゃさん、としさん、大変参考になりました。
ありがとうございます。
kekyo
会議室デビュー日: 2002/12/12
投稿数: 13
投稿日時: 2003-07-09 21:14
C#とVB.NETは、ネイティブなバイナリコードを直接生成できません。
必ずMSILによるマネージコードになります。

が、アセンブリ(DLL)に関して言えば、条件付きでネイティブバイナリコードを
生成出来ます。

・アセンブリに厳密名が付いていること
・gacutil を使用してグローバルアセンブリキャッシュにアセンブリをインストール
 する過程でネイティブバイナリコードを生成する

このため、生成されたネイティブバイナリコードを配布することは出来ません。
詳しくは本サイトの「インサイド.NET Framework」を読まれると判ると思います。

スキルアップ/キャリアアップ(JOB@IT)