トップページ⇒tech
1001コメント344KB

ふらっとC♯(Part5)

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
このスレッドは

「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。

ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。

少しずつC#プログラマを名乗るものが現れました。みなさん一緒に勉強しましょう。

前スレッドはこちら
http://pc2.2ch.net/test/read.cgi/tech/1059028988/l50 (Part4)
http://pc2.2ch.net/test/read.cgi/tech/1047210828/l50 (Part3)
http://pc2.2ch.net/test/read.cgi/tech/1035895873/l50 (Part2)
http://pc2.2ch.net/test/read.cgi/tech/1023766485/l50
0153デフォルトの名無しさんNGNG
>>152
どういう意味か良く分からないんだが…
0154デフォルトの名無しさんNGNG
textBoxに半角数字しか入力できないようにする方法はありますか?
ImeModeをOFFにしてみたけど、これじゃ半角英数字になってしまうんです。
0155デフォルトの名無しさんNGNG
調べろ。わからなかったら自分で作れ
0156デフォルトの名無しさんNGNG
よぅ。カスども。
俺C#やったことないんだけど、質問してもいい?
みんなC#ってなにに使ってんの?
「ネイティブコード吐けるJava」みたいな認識で買おうか迷ってんだけど、
そんなノリで買ってもいいものなんですか?
0157デフォルトの名無しさんNGNG
theSpoke効果だな
0158デフォルトの名無しさんNGNG
>>156
10個は買えバカ
0159156NGNG
買うなら1個でいいよ。
やっぱASPで使ってんの?
それともクライアントアプリ?
どうなのよ。
0160デフォルトの名無しさんNGNG
それを聞いて何かが変わるのか?
0161デフォルトの名無しさんNGNG
> 「ネイティブコード吐けるJava」みたいな認識

全然違う

> やっぱASPで使ってんの?

ASP.NET か?

> それともクライアントアプリ?

どっちもだろ。
0162156NGNG
>>160
あー、「結局どーしてーのよ?」みたいななるわな。
具体的にはC/Sタイプのアプリのクライアント側を何で作るか迷ってるのよ。
仕事の合間の趣味の話だから手ごろそうなC#がいいのかなと。
どんなん作りたいかっていうと、MSメッセンジャーみたいのだと思ってくれればいいな。

>>161
全然違うんか。
今まではクライアントアプリっつーとVCかDelphiか、まぁVBとかだったわな。
VCしかできねーけど。
んでひょっこりでてきたC#はどーなのよと思ってな。
Javaでもいんだけど、インストールの説明に「J2SE1.4ランタイムが必要です」って書くのと、
「.NETFrameforkランタイムが必要です」って書くのとじゃちょっとイメージ違うしな。
0163名無しさん@そうだ選挙に行こうNGNG
terrarium1.2になりますた

http://www.terrariumgame.net/terrarium/
0164名無しさん@そうだ選挙に行こうNGNG
>>162
次期VS.NET(2005)は単体言語版(C#だけとか)で
Web(ASP.NET)機能を除いたグレードのものが格安で
出るらしいです。

趣味ならこれ使ってC#の非Webアプリを創るのが
非常に快適ではないかと思う。VCできるならなおさら
VB.NETに走る必要もないわけだし。

一つだけ問題があるとすれば、2006〜2007年予定の
次世代Windows(Longhorn)までは.NETFrameworkが
デフォのAPIじゃないことだろう。なのでフリーウェアとか
シェアウェアで早期にアプリを公開するつもりなら
これは向いていない。
0165名無しさん@そうだ選挙に行こうNGNG
C#にはウニオン型は無いの?
0166名無しさん@そうだ選挙に行こうNGNG
struct でオフセット弄る
0167名無しさん@そうだ選挙に行こうNGNG
int?ってなんか萌えるな
0168156NGNG
>>164
素敵情報サンクス。
サーバ(C++)とクライアント(Java)で作りつつ、
教えてくれた安価モデルが発売されたらクライアントをC#に移植
みたいな方向で考えてみるよ。

時期OSで.NETFrameworkが標準じゃなくなるってのは寝耳に水だけど、
さすがにバンドルされてないとは考えられないから、
あまりそっちは気にしなくていいかもな。
でもちょっと怖いから調べててみることにする。

マジサンクス!
0169デフォルトの名無しさんNGNG
> 時期OSで.NETFrameworkが標準じゃなくなるってのは寝耳に水だけど

そんなこと誰も書いてないでしょ
0170デフォルトの名無しさんNGNG
>>165
なくなっちゃったよ、せっかくintやらのビット数固定にしたんだから、
その範囲でのみでても付けてもらえると便利っていうか、Cより安全確実でよかったんだけどね。
ちょとさびしい。
頑張ってstruct使ってビットフィールド操作関数作るしかないっすね。
0171デフォルトの名無しさんNGNG
>>169
WinFXのことだろ。
0172156NGNG
defaultとstandardはこの場合同意語にならんか?
それともそーゆーことじゃないのか?
なんにせよいろいろややこしそうだな。
0173デフォルトの名無しさんNGNG
生成済みのオブジェクトの型を調べて、
それの型と同じ型で new をする方法があったら教えてください。

class ClassA() { ... }
class ClassB() { ... }
...
class MyApp
{
  void test()
  {
    object [] list = { new ClassA() , new ClassB() } ;
    foreach( object i in list )
    {
      sub( list[ i ] ) ;
    }
  }
  void sub( object a )
  {
    「aの型=ClassA/ClassB」  localData = new 「aの型=ClassA/ClassB」() ;
    ...
  }
}

といった事をしたいのですが、System.Reflection を使えばできると聞いたのですが、
分りやすいサンプルがあったらよろしくお願いします。
0174デフォルトの名無しさんNGNG
>>173
object localData = a.GetType().GetConstructor().Invoke( new object [] {} );
0175デフォルトの名無しさんNGNG
>>174
有難うございます、助かりました。
0176デフォルトの名無しさんNGNG
>>175
でも、実装の仕方としては、class A, B を ICloneable にして Clone() メソッド書くのが普通な気が。
0177デフォルトの名無しさんNGNG
>>175
それでほんとに問題ないのかちゃんと確認した方がいいぞ。
0178デフォルトの名無しさんNGNG
>>176
リフレクションの使い方の取っ掛かりが欲しかったので、構わないんです。
コンストラクタ以外にもメソッドを呼び出すときに、もっと複雑なことになるし、この辺りは覚悟していましたし
いずれにしても template が実装されるまでの繋ぎなので。
0179デフォルトの名無しさんNGNG
>178
どうtemplateにからむんでしょう?個人的に興味
0180デフォルトの名無しさんNGNG
ダウンキャストを知らないだけだったりして…
0181デフォルトの名無しさんNGNG
C#の宿題スレはまだ無いみたいなのでここにて。

C#で簡易telnetを作れという問題です。通信の方法がそもそも分かりません
0182デフォルトの名無しさんNGNG
>>181
ソケット作れ
0183デフォルトの名無しさんNGNG
言語依存じゃない部分が分かってないんだろ?
0184デフォルトの名無しさんNGNG
>>181
TCPで接続してTELNETプロトコル話せばいいだけ

http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=telnet+%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB
0185デフォルトの名無しさんNGNG
IList をインターフェイスに持つオブジェクトでシリアル化する時、上手く行かなくて地団駄踏んでいます。

System.Runtime.Serialization.Formatters.Soap.SoapFormatter
で、オブジェクトをXmlにシリアライズする時は ISerializable でカスタマイズできるみたいですが、

System.Xml.Serialization.XmlSerializer
で、オブジェクトをXmlにシリアライズする時でカスタマイズできる方法は無いんでしょうか?
知っている人いますか?

IList を入れていると、XmlSerializerが頑張っちゃって自動的にシリアライズしてしまうみたいで・・・
IListが入っていても普通のクラスのように振舞わせる事はできないのでしょうか?
0186デフォルトの名無しさんNGNG
>>185
取りあえず簡単なIListを実装したコレクションを作ったけど普通にシリアライズ・デシリアライズできたぞ。

XmlSerializerは手軽に使えてカスタムしにくいのが特徴なので、まあいろいろ勘案して。
シリアライズ用の別クラスを作るとか。
0187デフォルトの名無しさんNGNG
あ〜、>186の一行目はちょっと勘違いというか見当違い。無視して。
0188デフォルトの名無しさんNGNG
>>186
あぅ、書き損じたんですが、添え字にマイナス値を使えるようにするとアウトなんですよ。
ヘルプを見ると、this[int]インデクサプロパティーを見ているようで、Countとセットで
動作しているみたいなんです。
当然動作するわけも無いのですが、ここでIListを見て勝手に動作されるとちょっと具合が悪いので、
この機能に寝ていてもらいたいのですが、手段が見つからない・・・・
0189デフォルトの名無しさんNGNG
単純に足し算するだけのメソッドなんですが、
public int Add()
{
return 10+10;
}
下のように使うと、Add()の戻り値は変数aに入りますよね。
public void Test()
{
int a = Add();
}
以下の場合だと、Addの戻り値はどこへ格納されるんでしょうか?
publi void Test()
{
Add();
}
0190デフォルトの名無しさんNGNG
そのまま破棄されるだけだが。
0191デフォルトの名無しさんNGNG
C系言語の特徴で
int main()
{
10 ;
}
とやっても、文としては正しいと認識されます
と、書こうとして、C#でやったら、意味が無いって怒られました。
さすがにチェックすることにしたみたいですね。
0192デフォルトの名無しさんNGNG
public int hoge; //hogeは1から100をとる
上の場合、publicだから外からどんな値が来るかわかりません。
hogeに値が代入された時に、hogeが正しい値かどうかを調べるにはどうしたらいいんですか
0193デフォルトの名無しさんNGNG
>>192
プロパティにしてsetアクセサの中でチェックする。
つかまさにそのためにプロパティがあるんだが。
0194デフォルトの名無しさんNGNG
プロパティにする
0195デフォルトの名無しさんNGNG
set{ if(value >= 1 && value<=100) hoge = value; else throw new FormatException(); }
みたいにすればいいんですね。なるほど
0196デフォルトの名無しさんNGNG
どうでもいいがその例だとArgumentOutOfRangeExceptionの方が妥当だな。
0197デフォルトの名無しさんNGNG
>>195
public int hoge {
  set {
    if (1 <= value && value <= 100)
      hoge = value;
    else
      throw new ArgumentOutOfRangeException();
  }
}

ちょっと無理っぽいが、通るのか?
0198デフォルトの名無しさんNGNG
GDI+はGDIより遅いって本当ですか?
0199デフォルトの名無しさんNGNG
>>198
自分で作って確かめろ、タコ
0200デフォルトの名無しさんNGNG
>ちょっと無理っぽいが、通るのか?
なんで?
0201198NGNG
>199
GDIはBitbltで
GDI+はGraphics.DrawImageで
確かめて良いですか?
0202デフォルトの名無しさんNGNG
GDI+は長角まで待つべし
0203デフォルトの名無しさんNGNG
リフレクションを使ってラムダ式を動的に作りたいのですが、
参考になるHPや良い方法があったら教えてください。
例えば、正規分布関数のクラスが、以下のように存在していて
public class DistributionFunctions
{
 public static dobule Normal( double x , double a , double v )
 {
  return 1.0 / Math.Sqrt( 2 * Math.PI * v ) * Math.Exp( -(x-a)*(x-a)/( 2 * v ) ) ;
 }
 ...
}

やりたい事は、
delegate double DoubleToDoubleDelegate( double x ) ;
public class DistributionDelegates
{
 static DoubleToDoubleDelegate MakeNormal( double a , double v )
 {
  ここに手際よく大量生産できるコード
 }
}

使い方は
void hogehogeMethod()
{
 DoubleToDoubleDelegate df = MakeNormal( 0.0 , 1.0 ) ;
 y = df( 0.0 ) ;// ここで y = Normal( x , 0.0 , 1.0 ) が呼び出される
}
0204デフォルトの名無しさんNGNG
>>203
よくわからんけど、こんなこと↓がしたいの?

using System;
public class DistributionFunctions {
double a;
double v;
public DistributionFunctions(double x, double y){
a = x;
v = y;
}
public double Normal( double x )
{
return 1.0 / Math.Sqrt( 2 * Math.PI * v ) * Math.Exp( -(x-a)*(x-a)/( 2 * v ) ) ;
}
}
delegate double DoubleToDoubleDelegate( double x );
class Hoge {
static DoubleToDoubleDelegate MakeNormal( double a , double v ) {
//ここに手際よく大量生産できるコード
DistributionFunctions f = new DistributionFunctions(a, v);
return new DoubleToDoubleDelegate(f.Normal);
}
static void Main() {
DoubleToDoubleDelegate df = MakeNormal( 0.0 , 1.0 ) ;
double y = df( 0.0 ) ;// ここで y = Normal( x , 0.0 , 1.0 ) が呼び出される
Console.WriteLine("y = {0}", y);
}
}
0205204NGNG
public class DistributionFunctions {

の{の前に全角スペースが入ってた。。。鬱
0206デフォルトの名無しさんNGNG
C#でGDIをつかうすべはあるのか?APIの直たたきならGDIをつかえる?
0207デフォルトの名無しさんNGNG
>>204
方法は問わないんですが、そうです、そんな感じです。
そこで、関数の引数を確保するクラスを作る必要がありますよね。
関数の数が多くて、これを全部自動生成してしまいたいんです。
0208204NGNG
>>207
> そこで、関数の引数を確保するクラスを作る必要がありますよね。
> 関数の数が多くて、これを全部自動生成してしまいたいんです。
204の例を使っても、好きなだけ関数は作れるけど。。。↓こういうことではない?

static void Main()
{
double d1 = 1.0; // 数字は適当
double d2 = 1.0; // 数字は適当
DoubleToDoubleDelegate[,] df = new DoubleToDoubleDelegate[10,10];
for(int i=0; i < 10; i++, d1 += 0.2){
for(int j=0; j < 10; j++, d2 += 0.2){
df[i,j] = MakeNormal( d1, d2);
}
}
for(int i=0; i < 10; i++){
for(int j=0; j < 10; j++){
double y = df[i,j]( 0.0 ) ;
Console.WriteLine("y = {0}", y);
}
}
}
0209デフォルトの名無しさんNGNG
>>208
ども、お手数掛けてすみません。
対象となる関数は、正規分布関数のようにパラメータ二つだけとは限りませんし、
今後、多変数に対応するにあたって、このまま場当なやり方で行きますとプログラムの保守が危機的になると考え
第一段階として、現在はC#のソースコードを自動生成するプログラムを作って対応しています。
しかし、これも必ずしも良い方法とも言えず、もっと効率的にプログラムできる方法として、
色々探している内にリフレクションという物を使ってみようかと考えていました。
さっそく始めてみたのですが、これがチュートリアルの良いページがなかなか見つからなくて・・・・

ちなみに僕自身、ここに書き込む前に色々考えたのですが、
一般的なC#の構文を使った範囲内ではおそらく良い解決方法はないだろうというのが結論でした。
0210デフォルトの名無しさんNGNG
はじめまして、
C#でデータベースに関することを勉強しています。
ボタンを押すとアクセスに「123」というデータを追加するプログラムを書いています。
壁にぶつかりましたので、ご指導していただけませんか。

odbcDataAdapter1などの設定し、以下のボタンの内容を書きました。

odbcConnection1.Open();
odbcDataAdapter1.InsertCommand.Parameters["@ab"].Value="123";
odbcDataAdapter1.InsertCommand.ExecuteNonQuery();
odbcDataAdapter1.Fill(dataSet11);
odbcConnection1.Close();

すると
'System.IndexOutOfRangeException' のハンドルされていない例外が
system.data.dll で発生しました。
0211デフォルトの名無しさんNGNG
> 対象となる関数は、正規分布関数のようにパラメータ二つだけとは限りませんし、
> 今後、多変数に対応するにあたって、このまま場当なやり方で行きますとプログラムの保守が危機的になると考え
> 第一段階として、現在はC#のソースコードを自動生成するプログラムを作って対応しています。
これが結構まっとうな方法な気もしますが。。。

もしかして、パラメータが変わるだけではなく、どんな関数を作るかは
あらかじめ決まってない、ってことですか?
C++でいえば、boost::lambdaみたいなことをしたいのかなぁ?

> しかし、これも必ずしも良い方法とも言えず、もっと効率的にプログラムできる方法として、
> 色々探している内にリフレクションという物を使ってみようかと考えていました。
リフレクションで出来るかどうかはわかりませんが、一応参考に。

http://members.jcom.home.ne.jp/1213687801/cs/reflection/reflection4.html
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemreflectionemittypebuilderclasstopic.asp
0212デフォルトの名無しさんNGNG
>>210
ここにある例が参考になりませんかね。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpref/html/frlrfsystemdatasqlclientsqldataadapterclassinsertcommandtopic.asp
0213デフォルトの名無しさんNGNG
普通に IDbCommand.ExecuteNonquery() はダメなの?
0214デフォルトの名無しさんNGNG
プログラムの構造をどうしたらいいのかが分かりません。
例えば、オセロプログラムを考えるとします。
オセロのマスの部分にButtonから継承したクラスMasuを使います。
Masuを8*8個集めた配列をBoardとします。
オセロゲーム ━━ Board (集約する)━━ Masu という風になっていますが、
Masuがクリックされた時に 隣のマスをひっくり返すかどうか走査するとしても、
Masuからは隣のMasuなんて分かりませんよね?
だからBoardに頼んで調べてもらいたいわけですが
どうやったらそうできるのかがわからないです。どうしたらいいのですか?
0215デフォルトの名無しさんNGNG
X 配列Board
O クラスBoard

でした
0216デフォルトの名無しさんNGNG
>>214
Masu に必要な機能は、
・そのマスの内容を保持
・画面に描画する
・クリックされたことを、Board に通知する
の3つでいいんじゃない?

ひっくり返すのは、Board でやればいい。
0217デフォルトの名無しさんNGNG
>>216
その三番目のboardに通知する方法が分からんですよ。
0218デフォルトの名無しさんNGNG
>>217
Clickイベント。
0219デフォルトの名無しさんNGNG
>>217
boardのメソッドの引数に自分を渡せばいい。
0220デフォルトの名無しさんNGNG
>214
もっと
PlayerとかTurnMasterとかJudgeとかつくれや。Masuはいらん
0221デフォルトの名無しさんNGNG
>>220
高度すぎ。質問者をみて答えてやれよ。
0222デフォルトの名無しさんNGNG
>221
書き込んだ後そう思った.すいません。

Masu作るときにボードを引数で渡してそれ使う.それかイベント
0223デフォルトの名無しさんNGNG
こういうのってできるかな?
void Hoge( params object [] arg )

の ref バージョンで
void Hoge( ref object arg0 , ref object arg1 , ref object arg2 ... ) ;

の様な物。
必要個数分オーバーロードするしかないかな?
0224デフォルトの名無しさんNGNG
コントロールのクライアント領域について質問です。
以下のような Panel を継承したクラスをつくりました。

public class PanelEx : System.Windows.Forms.Panel
{
 public PanelEx() { }

 protected override void OnPaint(PaintEventArgs e)
 {
  base.OnPaint (e);

  Pen p = new Pen(Color.Black, 1);
  e.Graphics.DrawRectangle(p, this.ClientRectangle);
  p.Dispose();
 }
}

この PanelEX クラスのインスタンスを、普通に Form1 の
コンストラクタ内で生成したところ、画面には PanelEx の
左側と上側にしか線がひかれません。

なぜでしょうか?また、どうすればちゃんと矩形が描かれますか?
0225デフォルトの名無しさんNGNG
>>224
はみ出て見えないので矩形を小さく、例えば幅と高さを-1にしたりする。
0226224NGNG
>>225
ええええー。なぜそんな仕様になってるんでしょうか?
0227デフォルトの名無しさんNGNG
>>226
厨避けの為。
0228デフォルトの名無しさんNGNG
>>226
別におかしくないよ。

http://www.microsoft.com/japan/msdn/library/ja/jpdnprogwincsharp/htm/chapter15.asp?frame=true
0229デフォルトの名無しさんNGNG
>>220
ウヒャー
220さんの高度な設計だと、どんな風になるんですか?
コードをつけながら説明してほしい・・・
0230デフォルトの名無しさんNGNG
>>229
高度
コード




!?
0231デフォルトの名無しさんNGNG
超基本で悪いんだけど、
int i = Console.Read();
Console.WriteLine(i);

これでたとえば「2」を入力すると出力が「50」なんてなるんですが、なぜなのでしょうか?
0232デフォルトの名無しさんNGNG
>>231
コンピュータの中では、「文字」ってのは一定のルールで数字の列に変換されて扱われてます。
このルールのことをエンコーディング、数字(の列)のことを文字コードと呼んだりします。
んで、文字の "2" に対応するコードが 50 (16進数で 0x32) なわけです。

ファイルやネットワーク等での読み書きは、byte の列を使って行われるのが基本で、
.Net Framework で文字列からこのバイト列に(またはその逆に)変換するには、
Encoding クラス(のインスタンス)を用います。
0233デフォルトの名無しさんNGNG
P.S.
"2"という文字列から、数字の 2 に変換するには、Int32.Parse() などを使います。
0234231NGNG
>>232
文字コードを実数値にしないといけないんですね。
丁寧な即レスありがとうございます。
0235デフォルトの名無しさんNGNG
久しぶりにきたが、なんだかいいスレになってるじゃねーか!
0236デフォルトの名無しさんNGNG
コンソールはほとんど勉強してなかったから試してみたんだけど

char c = (char)Console.Read();

とすれば、そのまま表示できまっせ。MSDNだとintを返すことになってるから
まぎわらしいんだけどね。
0237デフォルトの名無しさんNGNG
こんにちは

今画像のサムネイル保存用に複数画像をまとめてひとつの
ファイルにしようとしています。
Aファイルサイズ・Aファイル・Bファイルサイズ・Bファイル・・・
みたいな感じ合成し、インデックスで呼び出そうかと思っています。
で、ふと思ったのですが、そういう複数のファイルをまとめてしまう
クラスって既にあったりするのでしょうか。
よろしければお教えください。よろしくお願いいたします。
0238デフォルトの名無しさんNGNG
Bitmap imageA = new Bitmap("A.bmp");
Bitmap imageB = new Bitmap("B.bmp");
Bitmap imageC = new Bitmap("C.bmp");

Bitmap bmp = new Bitmap(300, 100);
Graphics g = Graphics.FromImage(bmp);
g.DrawImage(imageA, 0, 0);
g.DrawImage(imageB, 100, 0);
g.DrawImage(imageC, 200, 0);
g.Dispose();
bmp.Save("ABC.bmp");
bmp.Dispose();

imageA.Dispose();
imageB.Dispose();
imageC.Dispose();
0239デフォルトの名無しさんNGNG
そうきましたか・・・

Hash的に名前で簡単にストリームを取り出せるような
仕組みが既存クラスにないかなーとか思っていたのでした。

やはり頑張って自分で実装してみます。

ありがとうございました。
0240デフォルトの名無しさんNGNG
参照設定でvjslib.dll(Microsoft Visual J# .NET Class Library)を追加して、java.util.zipで
0241デフォルトの名無しさんNGNG
!!!
なるほど!
早速やってみます。

ありがとうございました!
0242デフォルトの名無しさんNGNG
DirectX 9.0 SDK (Summer 2004)の日本語ドキュメントをインストールしたんだが、
VS.NET2003に反映されないのです。
なんでなんでしょう・・・そういう方他にいますか?
0243最凶VB厨房NGNG
まずは再起動
0244242NGNG
>>243
再起動もしたんですがダメでした。
0245最凶VB厨房NGNG
SDK本体は入れてるのよな?
まっわからんけど
0246デフォルトの名無しさんNGNG
>>242
フィルタか?
0247242NGNG
英語版ヘルプははいってるんですが・・・
フィルタもなしになってます。
本来ならVS.NET起動時に「ヘルプを反映中・・」とかでますよね?
0248242NGNG
連結ヘルプ コレクション マネージャで更新できました。
お騒がせしました。(・∀・)
0249デフォルトの名無しさんNGNG
>>242
DirectX9 SDK Summer2004の日本語ドキュメントってもう出てたの?
0250デフォルトの名無しさんNGNG
>>249
変な書き方しちゃいましたね。
2004入れてから日本語ドキュメント入れたら〜でした。スマソ
0251デフォルトの名無しさんNGNG
外部プロセスに確保した領域をPtrToStructureすると例外が発生するのは何故でしょうか。どうかご教授お願いします。
using HANDLE=System.IntPtr;using LPVOID=System.IntPtr;using SIZE_T=System.UInt32;using DWORD=System.UInt32;
class CMyApp:System.Windows.Forms.Form
{
  [System.Runtime.InteropServices.DllImportAttribute("kernel32")]
  static extern LPVOID VirtualAllocEx(HANDLE hProcess,LPVOID lpAddress,SIZE_T dwSize,DWORD flAllocationType,DWORD flProtect);
  DWORD PAGE_READWRITE=0x04;
  DWORD MEM_COMMIT=  0x1000;
  static void Main()
  {
    System.Windows.Forms.Application.Run(new CMyApp());
  }
  CMyApp()
  {
    this.Click+=new System.EventHandler(OnClick);
  }
  void OnClick(object sender,System.EventArgs e)
  {
    LPVOID 自分側の領域=VirtualAllocEx(System.Diagnostics.Process.GetCurrentProcess().Handle,(LPVOID)0,(DWORD)System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.TimeSpan)),MEM_COMMIT,PAGE_READWRITE);
    LPVOID 他人側の領域=new LPVOID();
    foreach(System.Diagnostics.Process inc in System.Diagnostics.Process.GetProcesses())
      if("Explorer"==inc.ProcessName)
        他人側の領域=VirtualAllocEx(inc.Handle,(LPVOID)0,(DWORD)System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.TimeSpan)),MEM_COMMIT,PAGE_READWRITE);

    System.Runtime.InteropServices.Marshal.PtrToStructure(自分側の領域,typeof(System.TimeSpan));//自分側の領域では例外は発生しない

    System.Windows.Forms.MessageBox.Show("次で例外発生");
    System.Runtime.InteropServices.Marshal.PtrToStructure(他人側の領域,typeof(System.TimeSpan));
  }
}
0252デフォルトの名無しさんNGNG
>>251
非Managedなプロセス空間にManagedな構造体を確保する意味がさっぱりわからないんだが。

ttp://dotnetjunkies.com/WebLog/chris.taylor/archive/2004/05/31/14828.aspx
とりあえず外部プロセスへのちょっかいの参照。
■ このスレッドは過去ログ倉庫に格納されています