- 1 名前:デフォルトの名無しさん [2010/03/20(土) 02:15:38 ]
- このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。 なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。 >>980を踏んだ人は新スレを建てて下さい。 >>980が無理な場合、話し合って新スレを建てる人を決めて下さい。 ふらっとC#,C♯,C#(初心者用) Part56 pc12.2ch.net/test/read.cgi/tech/1267348401/ 関連スレ C#, C♯, C#相談室 Part55(実質56) pc12.2ch.net/test/read.cgi/tech/1260111240/1 VB.NET質問スレ(Part33) pc12.2ch.net/test/read.cgi/tech/1263738929/1 C++/CLI part3 pc12.2ch.net/test/read.cgi/tech/1206447234/1
- 596 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:17:50 ]
- 聞いたことないな
.NETのオープンソースが盛り上がりだしたのって最近MSがオープンソースに積極的になってからだからな WPF使えば一瞬でできる報われないことをわざわざやる人もいないだろ
- 597 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:40:38 ]
- いやNFW3.5にするとWin2000を切り捨てざるを得なくなるので、それを避けたいだけなのです。
フリーではライブラリはないか、または聞いたことがないぐらいマイナーということですね。 昔はいくつかあったみたいですが、今はすべて商用に変わっていてがっくりですorz
- 598 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:46:22 ]
- 2000は切り捨ててもいいのよ
- 599 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:52:05 ]
- UIだけActiveXでHTMLやSilverlightベースにしてしまえ
- 600 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 11:58:59 ]
- jQueryがあるじゃないか
- 601 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:32:27 ]
- ふーん
- 602 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 12:57:25 ]
- はーん
- 603 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:37:09 ]
- 10年前のOSだもんなあ。
IE6も10年前でみんな葬り去りたくてウズウズしてるんだから、2000も葬っていいわな。
- 604 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:40:24 ]
- 2000のSP4は、7月にサポート切れだったろ。
そのタイミングで俺的には終了だな。
- 605 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:25:57 ]
- MSだけじゃなくて開発側も古いWindowsサポートって頭があるからな
切っちゃっていいでしょっていうか切っていこうよ。.netなら尚更
- 606 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:29:06 ]
- 逆にMSがサポートしないものを「サポートします!」とか、
すごい勇気だなぁ、って思いますよw
- 607 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:36:27 ]
- >>592
RoboFormとか、skinstudioかねぇ? 後者はDirectX用だからやや違うかもしれないけど。 他は皆がレスしてるようにWPF自体がスキン機能そのものの(機能とデザインの分離)だから それを使うのが一番の王道だな。
- 608 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:36:45 ]
- MSじゃないどこかの企業がそれを大々的にするって言ってたな。
- 609 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:40:42 ]
- DevExpress .NET Windows Forms Skinning Library
SPREAD for .NET Windows Forms Edition AppStylist for Windows Forms ぐぐったら色々あるみたいね。もちろん、みんな商用プロダクトだが。
- 610 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:41:33 ]
- スキン突っ立ってオーナードローするだけ出しな
そんなに手間じゃないだろ
- 611 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:42:28 ]
- 十分手間だろ
一つやったら全部やらないと空気読めてない感じになる
- 612 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:42:38 ]
- SPREADは違うだろ。
- 613 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 14:52:17 ]
- とりあえず、オープンソースの範囲ではこんなのがあった。
weys.codeplex.com/ UIのカスタマイズと言うよりか、Windows Media Playerのスキンっぽい感じだな。
- 614 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:00:47 ]
- みなさん、いろいろとありがとうございます。
私が今開発しているのはとあるゲームなのですが、それがWin2000以降に対応していたもので Win2000ユーザーを切り捨てるのもどうかと考えてたのです。 数年前ならコントロールのライブラリも意味があったかもしれませんが、今ではWPFが一番 いいみたいですね。 WPF検討してみます。 しかし、日本語だと書籍はないですね... いろいろとありがとうございました。
- 615 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:18:49 ]
- WPFならXPの古いマシンは切り捨てることになるよ
まあゲームなら問題ないな
- 616 名前:デフォルトの名無しさん [2010/03/28(日) 16:35:08 ]
- 配列に条件によって値を入れたいと思います。
(1) int[] table = {01, 0, 120, 270}; (2) int[] table = {02, 0, 180, 90}; と2種類の値を入れたいとします。 (1)の場合の条件と、(2)の場合の条件が違う場合、 if(条件) int[] table = {01, 0, 120, 270}; else if (条件) int[] table = {02, 0, 180, 90}; //以下tableを使った処理。 とすると、処理をするところで、 tableがないとエラーになります。 int[] table; if(条件) table = {01, 0, 120, 270}; else if (条件) table = {02, 0, 180, 90}; //以下tableを使った処理。 とすると、この書き方ではだめだと、大量にエラーになります。 配列の書き方という基本的なことなのですが、書けずに悩んでいます。 アドバイスお願いします。
- 617 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:37:17 ]
- >>615
ちょっとそれ詳しくお願いします。 要求スペックが高いから古いマシンでは駄目 XP SP3以降じゃないと駄目 という意味ですか?
- 618 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:37:19 ]
- >>616
そりゃあ、その2箇所を通過してしまうような条件が残ってるからだ。 当たり前のことじゃないか。
- 619 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:37:58 ]
- 素直にnew int書くだけでいいと思うの
- 620 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:38:26 ]
- int[] table;
これはifの前に宣言だけして table = new int[]{02, 0, 180, 90}; とかでできない?
- 621 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:41:40 ]
- >>617
前者 どんな環境でも動くことは動くけどバリバリのDirect3Dで描画されてるから ハードウェアアクセラレーションが十分に効かない環境では厳しい
- 622 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:44:30 ]
- >>616
これで一応エラーでないけどコメントの箇所何かいれないと何も設定されない条件ができないか? ideone.com/JFPMtwVZ
- 623 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:44:41 ]
- >>616
int[] table = null; にするか if() 〜〜 else 〜〜 とするか お好きなのをどうぞ
- 624 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:46:13 ]
- >>621
回答ありがとうございます。 なるほど、やはりそのような理由ですか。 了解しました。 スレチなのでWPFのことは別スレで聞いてみたいと思います。 みなさん、いろいろとありがとうございました。
- 625 名前:デフォルトの名無しさん [2010/03/28(日) 16:47:21 ]
- >>620
new int[]でできました。 ありがとうございました。 これをつけるのとつけないのとでは、どう意味が違うんですか?
- 626 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:50:23 ]
- >>625
いろいろ短縮したのが table = new int[]{01, 0, 120, 270}; これね 長くかくと table = new int[4]; int[0] = 01; int[1] = 0; int[2] = 120; int[3] = 270; こうなる
- 627 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:50:50 ]
- >>625
アホか。エラーメッセージに全部書いてあるだろ。
- 628 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:53:15 ]
- ああああああ
間違えた table = new int[4]; table[0] = 1; table[1] = 0; table[2] = 120; table[3] = 270;
- 629 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:57:27 ]
- table = new int[]{01, 0, 120, 270};
こうやって書くメリット?は table = new int[4]; table[0] = 1; table[1] = 0; table[2] = 120; table[3] = 270; この配列に table[4] = 100; とか増やしたい場合は table = new int[4]; これを table = new int[5]; としないといけないけど table = new int[]{01, 0, 120, 270,100}; こうするだけで{}で囲った中の要素分だけ勝手に配列を確保してくれる。 数を知りたければ配列の場合.Lengthでわかるはず
- 630 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:05:07 ]
- >>590
こっちはまだわかりやすいね 訳が適当だとどうにでも解釈できるよな
- 631 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:11:45 ]
- >>616
普通にこれだけでいける table=new []{0,1,2,3,4}
- 632 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 21:49:36 ]
- >>631
アホか。
- 633 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 23:50:29 ]
- 配列なんて使わずArrayList使おうよ
- 634 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 23:51:52 ]
- intの配列の初期化がまともにできないレベルだからなあ
もうちょい先だろ
- 635 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 23:53:00 ]
- うひゃあうひゃあ
配列とか扱うのはメモリ効率悪いwww
- 636 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:08:06 ]
- 男なら配列なんか使うな!
- 637 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:13:42 ]
- いまどき配列を嫌う男の人って…
- 638 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:28:06 ]
- 大した弊害なくて使えるなら何だって良いさ
- 639 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 00:34:17 ]
- ですね
- 640 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 03:59:41 ]
- volatile の効果が実感できるソースコードの例は無いでしょうか?
簡単なコードでは実感できないような修飾子なのでしょうか。
- 641 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 06:16:01 ]
- 無理
- 642 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 06:19:56 ]
- そもそも初心者には使う必要のない修飾子
- 643 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 06:39:07 ]
- VSの設定保存機能って使ってる?
ビルドしたらなんとか.exe.configとかいう名前で生成されるやつ。 自分で用意してるから使わないんだけど、生成させないようにするのはどうするの?
- 644 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 06:47:40 ]
- App.configを消せばいい。
- 645 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 06:51:00 ]
- >>644
おー、サンクス。さっそく除外しとこう。
- 646 名前:デフォルトの名無しさん [2010/03/29(月) 09:13:16 ]
- ArrayListって内部的にリスト構造なの?
Listとどう違うの? リスト構造だとインデクサ[]は使えるとしてもアクセス効率 が悪いと思うけど
- 647 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 09:18:19 ]
- >>646
いや配列 配列の容量あふれると別の容量大きめの配列作ってコピーするから時々追加にO(n)かかる ArrayListはList<object>だった気がするなぁ〜 使わないから覚えてない…
- 648 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 09:20:00 ]
- ListはArrayListのGenericだから比べるところじゃないだろう
ListとArrayListの中身は配列 >ArrayList は、null 参照 (Visual Basic では Nothing) を有効な値として受け取り、要素の重複を許可します。 >Count が既に Capacity に等しい場合には、内部配列を自動的に再割り当てすることにより ArrayList の容量が増加し、新しい要素を追加する前に既存の要素は新しい配列にコピーされます。 >Count が Capacity より小さい場合、このメソッドは O(1) 操作になります。新しい要素を格納するために容量を増やす必要がある場合、このメソッドは O(n) 操作になります。ここで、n は Count です。
- 649 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 09:21:07 ]
- ArrayListは過去の遺物。要素がobjectの場合でもList<object>を使った方がいい。
Silverlightでは切り捨てられた。
- 650 名前:デフォルトの名無しさん [2010/03/29(月) 10:13:51 ]
- ありがとう。Listという言葉が紛らわしいですね。
C#の参考書を見ると、Windows GUIが簡単にできそう。 MFCを整理してより使い易くしているかんじ。 C++のMFCを勉強してきたけど、きっぱりとあきらめて C#で作り直した方が早いと思う。
- 651 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 10:47:41 ]
- ArrayListやHashtableって実装をさらけ出した悪い名前だと思う
- 652 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 10:54:34 ]
- そこがメリット
- 653 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 10:58:07 ]
- Java由来の名前だが、実装を示唆するような名前でないと速度の見積もりができないので、あれはあれでよい。
- 654 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 11:01:25 ]
- >>650
MFCを使ってる人がまだいたことに驚いた
- 655 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 11:05:19 ]
- listといえばリンクリストを指すのは悪い慣習だな
.NETではインデックスでアクセスできるものをlistと呼ぶ LinkedListもListと付いてるけどIListを実装してない
- 656 名前:デフォルトの名無しさん [2010/03/29(月) 12:24:01 ]
- WPFのC#のコードビハインドでのウィンドウサイズの指定方法を教えてください。
xamlでは、 <Window Height="400" Width="400"> と指定します。 FormのC#では、 this.ClientSize = new System.Drawing.Size(1173, 861); のようにできます。 WPFのC#の場合がわかりません。 Windowssize = new System.Drawing.Size(1173, 861); としてみたところ、System.Windows.Window.Windowsizeはアクセスできない保護レベルになっています、 と表示されています。 どこで保護レベルを変更すればよいでしょう? よろしくお願いします。
- 657 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 12:25:00 ]
- 保護レベル変更は無理
- 658 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 12:26:55 ]
- this.Width = 1173;
this.Height = 861; これだけ それとWPFでSystem.Drawingは使うな
- 659 名前:デフォルトの名無しさん [2010/03/29(月) 12:27:07 ]
- >>657
やりたいことはウィンドウサイズの変更なので、 ウィンドウサイズを変更できればよいです。
- 660 名前:デフォルトの名無しさん [2010/03/29(月) 12:29:59 ]
- >>658
ありがとうございました。できました。感謝です。
- 661 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 17:27:28 ]
- >>660
また俺が回答してやるよ どーんとこい!
- 662 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 18:34:08 ]
- いや俺が回答した
- 663 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 18:40:04 ]
- いやいや俺が
- 664 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 19:08:57 ]
- あ、じゃあ
俺がやったよ
- 665 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 20:47:38 ]
- 質問
現在、C言語で書かれたDLLが提供する関数を C#から呼び出そうとしています。 悩んでるが、「引数に構造体の配列を持つ関数」の処理です。 下記URLにソースコードを張りました codepad.org/SnH7gdwI 上でいう所のC側の「//<- ここで落ちる」というコメントのある所で不正アクセスで落ちてしまいます。 (stSample[0]に値が入ってるのは確認できました) C#側の構造体の渡し方がおかしいとかなと思ってるのですが、 どこがおかしいのか分からず・・・。 ご存知の方いましたら、教えて下さい。
- 666 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 20:52:16 ]
- public struct ST_SAMPLEDLL {
public byte cCount; public fixed byte strBuff[256]; } こうじゃね
- 667 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:18:54 ]
- 文字列にしてそれを渡してパースしてぶっこめば楽だな
- 668 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:35:23 ]
- 教えてください。
マルチスレッドを利用したプログラムがあります。 このスレッドのうち1本で、ローカルファイルにデータを出力する処理があり、そのファイル名を ファイル選択ダイアログ(System.Widows.Forms.SaveFileDialog)を利用して求めることにしたいと思います。 実際にプログラムを組んで実行すると、ShowDialog() を実行する箇所でエラー終了します。 メッセージボックスに表示されるエラーの内容は以下の通りです。 >OLE が呼び出される前に、現在のスレッドが Single Thread Apartment (STA) モードに設定されていなければなりません。 main 関数には STAThread の設定もしてあります。(元からついているようですが) 同じプログラムで、main 関数を実行したスレッド(以下、メインスレッドと記述します)でダイアログを表示すると正常に使用できます。 また、メインスレッドで開けばいいのかと、メインスレッドで表示しているフォームに Invoke を掛けて ダイアログを表示すると正常に使用‥‥出来るのですが、このフォームは最小化&非表示にしているため この状態でダイアログを表示しようとしても画面には出てきません。 メインスレッド以外からファイル選択ダイアログを正常に開く方法はないでしょうか。
- 669 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:44:03 ]
- UIスレッド以外から操作すんなよ。
- 670 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:45:43 ]
- ダイアログに見せかけたFormじゃだめなの?
- 671 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:49:18 ]
- メインスレッド側でAPIで呼べばいいんじゃね?
- 672 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:50:38 ]
- あー、Thread.SetApartmentStateってのがあってだね
- 673 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:50:49 ]
- 一応、Thread.TrySetApartmentState メソッド ってのはあるけどな・・・。
- 674 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:52:26 ]
- >>669-671
この3人にtaskkillしてあげてください
- 675 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:53:44 ]
- ひどい赤っ恥だ
- 676 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:56:37 ]
- メインのUIスレッド以外からUIいじるのはお勧めできないけどな。
- 677 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:58:40 ]
- >>674
何でtaskkillなんだよ >ダイアログを表示すると正常に使用‥‥出来るのですが、このフォームは最小化&非表示にしているため >この状態でダイアログを表示しようとしても画面には出てきません。 ダイアログで出ないとかいうからダイアログに見せかけたForm表示しろっていっただけ オーナーとの関係で表示がされないだけだろ
- 678 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 21:59:11 ]
- そのスレッドは自分で作ったスレッド?
それともスレッドプールのスレッド? 自分で作ったスレッドなら、差し支えなければ自分でSTAに設定すればいい(Start前しかできないよ) もしスレッドプールとかなら、これはMTAから変更することはできない。 汚いけど、必要な部分で自分でスレッド作って、STAに設定してメッセージボックス表示、 元のスレッドでは新しいスレッドを勝ち合わせとかするしかないと思う。 最初からUIスレッドにIncvokeする方が無駄はないけど。
- 679 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:01:42 ]
- そもそもSTAとかMTAって何なの
- 680 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:02:56 ]
- ようやくシンプルだけどまともに動くものが作れるようになってきたけど
未だにマルチスレッドとかよくわからないな >>679も何のことやら
- 681 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:05:41 ]
- Inside OLE2 嫁。
- 682 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:09:36 ]
- >>681
それ絶版じゃなかったっけ。
- 683 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:10:41 ]
- うん。
- 684 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:11:22 ]
- >STAとかMTA
VC++でATL使ってIEコンポーネント触ったときにちょっとかじった程度だな ナビゲーション関連がこの辺を理解してないとメッセージが来ないとかなんとか
- 685 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:24:31 ]
- うん。
- 686 名前:668 mailto:sage [2010/03/29(月) 22:26:02 ]
- みなさん、ありがとうございます。
てか、はやっ。w >>670 無知ですみません。 ダイアログに見せかけたフォームというのは、Form を継承したファイル選択ダイアログの ようなフォームクラスを自分で作る、と言うことでしょうか。 だとすると、今回は遠慮できたらいいかな、と。すみません。 >>671 いまの状況からは少し難しく。すみません。 >>678 System.Threading.Thread を利用して自分で作ったスレッドです。 やっとエラーメッセージの意味がわかりました。 あれは必ずしも main 関数でやれってことではなくて、ダイアログを操作するスレッドに STA を設定しろってことなんですね。 >>672 や >>673 さんの仰ってる方法で出来ると理解しました。明日、確認します。 >>669,676 自分も UI スレッド(この言葉を忘れていました)以外で UI の操作を行うのには抵抗があったのですが。 ‥‥気をつけておきます。
- 687 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:27:30 ]
- >>686
わかればよろしい 今後も精進しなさい
- 688 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:28:10 ]
- 偉そうに
- 689 名前:665 mailto:sage [2010/03/29(月) 22:32:50 ]
- >>666
レスサンクス。 バッファの取り方がまずいという事ですか。 今手元に環境がないので試せないですが、 明日試してみます。 良いサイトか何かあれば、いいんですが、 なかなか見つからず・・・orz ちなみに、環境は XP,VC# 2008Express (書き忘れました)
- 690 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:37:59 ]
- バッファの取り方でなくて、C#とCの型の違い。
- 691 名前:665 mailto:sage [2010/03/29(月) 22:42:37 ]
- >>690
サンクス それで、最初の構造体はアクセスできるけど(たまたま出来てるように見えてるだけ?)、 次の構造体にアクセスしようとしたら落ちると・・・。
- 692 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:46:49 ]
- 型の制約があるものより汎用的なテキストでやり取りする方が無難かもねえ
相談かこっちか忘れたけど以前同じようなdllを呼び出すアプリの相談で httpでやり取りする形にしてみたら?ってのがあったな
- 693 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:52:56 ]
- >>691
よく見たらST_SAMPLE**だったのか C#側の引数の型をIntPtr[]にしてそれぞれポインタの参照先に ST_SAMPLEDLL一つ分のメモリを割り当てておかないと
- 694 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:53:47 ]
- バイト配列が一番わかりやすいよ。
- 695 名前:665 mailto:sage [2010/03/29(月) 22:58:22 ]
- >>692
時間がたっぷりあって、許されるなら、DLLをC++か何かで 書き換えたいところですが、そうもいかず・・・。 このインターフェースは我慢するしかないですね。 >>693 です。ダブルポインタです。 そこなのですが codepad.org/SnH7gdwI このサイトに張ったソースの37行目でDLLに渡すメモリの実態自体は用意しているので、 大丈夫かと思ってたのですが、それとは別に確保するという事ですか? あと、宣言は、こっちの方がいいってことですね。 [System.Runtime.InteropServices.DllImport("MY_Dll.dll", EntryPoint = "test")] unsafe public static extern int test_call( IntPtr[] pstList);
- 696 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 23:00:44 ]
- IntPtrのみでいいはずだけどな。
Cでは、基本的に配列はメモリ上に整列するし。
|

|