C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: .Netのクラスをリフレクションで生成


(過去ログ 53 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■29776 / inTopicNo.1)  .Netのクラスをリフレクションで生成
  
□投稿者/ ニギー (4回)-(2008/12/14(Sun) 15:33:40)

分類:[VB.NET/VB2005 以降] 

.Net2008です。
リフレクションを使って.Netのクラスのインスタンスを取得したいのですがうまくいきません。

同ソリューション内のプロジェクトのインスタンスであれば
Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.Load(projectName)
clsType = asm.GetType(clsName, True, True)
Dim result As Object = CType(Activator.CreateInstance(clsType), Object)
このようなコードで取得できるのですが

System.Windows.Forms.Label という文字列からインスタンスを生成する場合
Assembly.Loadに.Netのフルパスを探して、書くしか方法はないのでしょうか?
引用返信 編集キー/
■29777 / inTopicNo.2)  Re[1]: .Netのクラスをリフレクションで生成
□投稿者/ 倉田 有大 (400回)-(2008/12/14(Sun) 15:57:12)
> System.Windows.Forms.Label という文字列からインスタンスを生成する場合
> Assembly.Loadに.Netのフルパスを探して、書くしか方法はないのでしょうか?

ここの意味がよくわからないな。

> リフレクションを使って.Netのクラスのインスタンスを取得したいのですがうまくいきません。

どううまくいかないのでしょうか?
引用返信 編集キー/
■29779 / inTopicNo.3)  Re[2]: .Netのクラスをリフレクションで生成
□投稿者/ ニギー (5回)-(2008/12/14(Sun) 16:51:49)
倉田 有大さん回答ありがとうございます。

>ここの意味がよくわからないな。
http://shinshu.fm/MHz/88.44/archives/0000222546.html
ここを見るとフルパスを指定していたので、フルパスを指定しなければいけないのかなと思ったので。


>どううまくいかないのでしょうか?
projectName="System.Windows.Forms" で実行してもアセンブリロードの部分で読み込めませんとエラーが出てしまいます。


上記に書いたURLのコードを参考にして
'System.Windows.Formsのフルパス取得
Dim fullPath As String = "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll"
Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.Load(fullPath)
と書いてみました下記のエラーが出力されます。(fullPathのパスは実在するファイルです。)
ファイルまたはアセンブリ 'C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\System.Windows.Forms.dll'、またはその依存関係の 1 つが読み込めませんでした。指定されたアセンブリ名またはコードベースは無効です。 (HRESULT からの例外: 0x80131047)

よろしくお願いします。
引用返信 編集キー/
■29780 / inTopicNo.4)  Re[3]: .Netのクラスをリフレクションで生成
□投稿者/ ニギー (7回)-(2008/12/14(Sun) 18:28:25)
勘違いしていたようでした

AssemblyにはLoad LoadFrom LoadFileがあるようで、LoadFromを使えば無事読むことができました。

引用返信 編集キー/
■29781 / inTopicNo.5)  Re[4]: .Netのクラスをリフレクションで生成
□投稿者/ 倉田 有大 (401回)-(2008/12/14(Sun) 19:22:03)
No29780 (ニギー さん) に返信
> 勘違いしていたようでした
>
> AssemblyにはLoad LoadFrom LoadFileがあるようで、LoadFromを使えば無事読むことができました。

おめでとうございます。フルパスで読み込めないのがなぜかわかりませんが〜
解決済み
引用返信 編集キー/
■29809 / inTopicNo.6)  Re[5]: .Netのクラスをリフレクションで生成
□投稿者/ ニギー (1回)-(2008/12/15(Mon) 12:55:05)
すみません。
閉じます。ありがとうございました。
解決済み
引用返信 編集キー/
■29838 / inTopicNo.7)  Re[6]: .Netのクラスをリフレクションで生成
□投稿者/ なちゃ (227回)-(2008/12/15(Mon) 18:00:11)
ちょっと気になるので念のため。

対象はWindowsForm関係のクラスだけですか?
そうでないなら別のアセンブリに含まれるクラスの場合に破綻する事になります。

もし対象がWindowsForm関係だけなら、GetTypeで何かWindowsFormのクラスの型をとってから、Assemblyで対象アセンブリを取得する方がいいです。
LoadFrom系はもうちょっと限られた用途で使うもんです。
※パスの指定の仕方もまずいですし

この辺は結構色々とややこしい話があって、あまり深く考えずに実装してしまうと、後で痛い目にあう可能性があります。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -