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

ふらっとC#,C♯,C#(初心者用) Part21

■ このスレッドは過去ログ倉庫に格納されています
0001ななしぃ#2007/11/18(日) 15:53:41
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

前スレ: ふらっとC♯, C#(初心者用) Part20
http://pc11.2ch.net/test/read.cgi/tech/1191036844/
0233デフォルトの名無しさん2007/11/29(木) 23:31:36
>>231
あっちが非同期な関数だと死ぬるよ?
普通にref STRUCTでマーシャラにおまかせしないのかい?
02342272007/11/29(木) 23:49:49
>>233
refにしないのは場合によってNULLを渡す必要があるためです。
というか非同期だったらref渡しでもまずいことになるような?
0235デフォルトの名無しさん2007/11/29(木) 23:59:51
ちなみに、MSDN の「コピーと固定」を読んどくといいよ
02362272007/11/30(金) 00:33:54
>>235
どうもありがとうございます。読んどきます。
0237デフォルトの名無しさん2007/11/30(金) 09:14:18
Listでジェネリックを使ってisExistsを実装するやり方がいまいちよく分かりません。

List<string> list;
//listに要素を入れる
list.Exists( delegate( string value ) { return list.IndexOf( value ) >= 0; } )

のように、IndexOfで引っかかるかどうかという判定にしているのですが、
意図した動作をしません。
おそらくみんなこう書くという、典型的な実装があるのではと思っているのですが、
ちょっと教えていただけませんでしょうか。
0238デフォルトの名無しさん2007/11/30(金) 09:21:44
意味が分からん。Containsを求めてるのか?
Existsは例えばList<string>内に「**で始まる文字列が存在するか」調べるとかそんなんだが。
ていうか実装?
0239デフォルトの名無しさん2007/11/30(金) 11:08:54
IndexOfで存在は確認できると思うけど?
0240デフォルトの名無しさん2007/11/30(金) 11:20:45
引数が string で 戻り値 bool の関数作って
bool b = aaa.Exists(new System.Predicate<string>(function1));

こんな感じでいいみたいだぞ
0241デフォルトの名無しさん2007/11/30(金) 11:57:36
listの要素のひとつひとつがそのlistに含まれるかどうかをテストしてるわけで
なかなか哲学的だ。
0242デフォルトの名無しさん2007/11/30(金) 12:15:45
>>240
デリゲートの暗黙のインスタンス使ったほうが
コンパイラが良きにはからってくれて効率良かったりする
0243デフォルトの名無しさん2007/11/30(金) 12:59:59
>>242
え、例えばどんなとき?
暗黙だろうが明示だろうが生成される型は同じだから変わらない気がするけど。

もしかして匿名デリゲートのことを言ってるのかな?
それにしてもどういう風に最適化しうるのか気になる。
0244デフォルトの名無しさん2007/11/30(金) 13:04:37
>>242
効率ってのは実行効率?コーディングの効率?
0245デフォルトの名無しさん2007/11/30(金) 13:19:17
型推論するだけじゃなくてILも変わるの?
0246デフォルトの名無しさん2007/11/30(金) 13:42:12
namespaceの効果とか機能がよくわからないのですが
ソースを大きく括って見やすくするためと思っていいですか?
0247デフォルトの名無しさん2007/11/30(金) 13:51:43
>>246
同じ名前の宣言を複数実装できるからやないん?
ポリモーフィズムの延長線かもしれんけど
0248デフォルトの名無しさん2007/11/30(金) 14:04:54
>>246
例えば、
System.Drawing.Image と
System.Web.UI.WebControls.Image を
区別できるようにするため。
02492422007/11/30(金) 17:06:47
すまん>>242は記憶違いだった
匿名メソッドの場合はキャッシュされるんだけどそれとごっちゃになってた
0250デフォルトの名無しさん2007/12/01(土) 10:12:50
>>238
わあああ
Containsがあるううう
0251デフォルトの名無しさん2007/12/01(土) 10:15:02
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

0252デフォルトの名無しさん2007/12/01(土) 14:19:03
DataGridViewの一列目がディレクトリ、二列目がファイル名になっていて、

foreach ( DataGridViewRow row in grid.Rows ) {
 MessageBox.show( row.Cells[ "Directory" ].ToString() );
 MessageBox.show( row.Cells[ "File" ].ToString() );
}

このように各行のそれぞれの値を見ようとしています。
Formで表に表示されている値はちゃんとディレクトリとファイル名が表示されているのですが、
上記コードで値を取り出すと、

DataGridViewTextBoxCell { ColumnIndex=0, RowIndex=0 }
DataGridViewTextBoxCell { ColumnIndex=1, RowIndex=0 }

のような値が取得されてしまいます。
これは何が悪く、どのように書くのが正しいんでしょうか。
0253デフォルトの名無しさん2007/12/01(土) 14:43:13
値を取得するのだから、そのものズバリValueプロパティを使う。
ToString()は値を取得するためのメソッドじゃないし、そういう形式の文字列を返すとドキュメントにも明記されてるだろ。
0254デフォルトの名無しさん2007/12/01(土) 14:49:15
あ、そうかValueか
すいませんアホでした
0255デフォルトの名無しさん2007/12/01(土) 15:45:29
DockStyle.Rightで複数のボタンを右詰めに表示しているのですが、
これらのボタン間の空白を設定するにはどうすればよいでしょうか?
MSDNを読むとMarginプロパティがそれらしいと思ったんですが、どうも影響しないようです。
0256デフォルトの名無しさん2007/12/01(土) 16:12:37
>>255
TableLayoutPanel使うか、

Panel に Button いれて
Panel の Padding を設定して
Panel の Dock を Right
Buttonの Dock は Fill
0257デフォルトの名無しさん2007/12/01(土) 17:18:46
>>256
ありがとうございます。

んーどっちもなんだか微妙ですね。
大したロジックでもないので手動でレイアウトすることにします。
0258デフォルトの名無しさん2007/12/01(土) 17:40:39
ちょっと教えてください。
System.Collections.GenericのLinkedListとLinkedListNodeを使って、
ダブルリンクリストを作り、データ追加イベントが発生すると、ある所
からデータを抜き出してリンクリストに追加、データ削除イベントが発
生すると、リンクリストから削除って感じのクラスを作ろうとしてます。

http://msdn2.microsoft.com/ja-jp/library/ahf4c754(VS.80).aspx
のサンプルを見たのですが、今いちどうすれば良いのか分からなく困
っております。と云うのは、データの追加と削除を行う場合、サンプル
では行き成りLinkedListNodeに実データを入れて、次にLinkedList作っ
て作ったLinkedListにLinkedListNodeを追加となってます。
LinkedListNode<String> lln = new LinkedListNode<String>( "orange" );
LinkedList<String> ll = new LinkedList<String>();
ll.AddLast( lln );

ダブルリンクリストを作る場合とかって最初に空のノード作って、作った
ノードに対してデータを追加して行く、下のようなイメージを持ってました。
LinkedListNode<String> lln = new LinkedListNode<String>();
LinkedList<String> ll = new LinkedList<String>("HOGE");
lln.AddLast( ll );
動的に発生するデータを追加して行きたいのですが、どの様に実装すべ
きでしょうか?
0259デフォルトの名無しさん2007/12/01(土) 17:46:36
http://sonic64.com/2006-05-03.html
これを参考に、ほぼ同じ作りで動画を再生しようとしています。
再生する動画はファイルパスをリストで持っておき、停止イベントから
PlayVideoClip()を呼び出して数珠つなぎに再生します。
こちらの例とは異なり、フルスクリーンで再生します。

で、困っていることなんですが、音量を調整+ミュートにできるようにしたいと思い、
とりあえずミュートを実装しようとしたところ、
videoClip.Audio.Volume = 0; // Video videoClip
としても音量が変わらず、さらに再生が終わって停止した時に
停止イベントが呼ばれなくなってしまいました。
正しく音量調整するにはどうすればいいのでしょうか。
0260デフォルトの名無しさん2007/12/01(土) 17:49:38
>>259に追記です。
ミュート自体は
videoClip.Audio.Volume = -10000;
とすることで実装できました。0は最大音量らしいです。
停止イベントが呼ばれず連続再生できなくなる件について、アドバイスをいただけると助かります。
0261デフォルトの名無しさん2007/12/01(土) 20:11:44
>>258
何言ってんのかわからない。
0262デフォルトの名無しさん2007/12/01(土) 20:53:48
>>260
ほぼ同じ作りったってコードみなきゃ話にならない
0263デフォルトの名無しさん2007/12/01(土) 21:24:30
>>258
なにがしたいのかよくわからんけど
そのサンプルは、こうしたらこんな風に状態が変わるよっていうだけのことで大した意味は無いだろ
LinkedListが自動的にリンクリストを作ってくれるから
余計なこと考えずに素直に使えばいい
02642632007/12/01(土) 21:30:01
誤解を招く書き方だったかも
そのサンプル通りに使えば自動的にリンクリストが作られる
要素をリンクしていくのはLinkedListの仕事だから余計なこと考えなくていい
0265デフォルトの名無しさん2007/12/02(日) 00:28:31
>>264
サンプル通りにやればリンクリスト作られるのは分かるんですが、
最初入れるデータが無い状態で、LinkedListNodeのインスタンス
が作れないので困ってます。
サンプルだと、
LinkedListNode<String> lln = new LinkedListNode<String>( "orange" );
"orange"を最初に入れてますけど、
LinkedListNode<String> lln = new LinkedListNode<String>();
こうするとエラーになる点と、

LinkedListNode<String> lln = new LinkedListNode<String>( "orange" );
LinkedList<String> ll = new LinkedList<String>();
ll.AddLast( lln );

最初の1回目だけLinkedListにLinkedListNode入れて、2回目以降
の処理では。
ll.AddFirst( "red" );
ll.AddLast( "yellow" );
と直接データをLinkedListに入れてるので、1回目と2回目以降で処
理を分割させないと駄目なので、1回目と2回目を外見から見た時に
同じ操作でリンクさせて行くようなクラスを作りたいんですが、その
作り方が分からないのです。
0266デフォルトの名無しさん2007/12/02(日) 00:37:08
Facadeデザインパターンを実装すればいいじゃん。
0267デフォルトの名無しさん2007/12/02(日) 00:49:23
>>258
LinkedList<T>はノード全体を管理しているのだから、
そのイメージのような空のノードなんて作る必要はなく、
LinkedList<T>のインスタンスに直接AddLastすればいいぞ。

そもそもLinkedListNodeなんて要素を追加するときにいちいち作るもんじゃないと思う。
0268デフォルトの名無しさん2007/12/02(日) 01:14:00
>>267
今MSDNでLinkedListとLinkedListNodeをもう一度見てた所ですが、
ちょっと頭混乱して来ました…_| ̄|○

なんか見てると、264氏や267氏の言われるようにLinkedListに直接
突っ込んで行けば良いのは分かってきましたが、LinkedListNodeと
LinkedListとの関係が分からなくなってしまいました。

> そもそもLinkedListNodeなんて要素を追加するときにいちいち作るもんじゃないと思う。
私の言いたいのも正にそこでして、自クラスのコンストラクターで空
のノードを用意出来れば良いと思ってたので、
LinkedListNode<String> lln = new LinkedListNode<String>();
としたかった訳ですが、これだとコンパイルエラーとなります。

リストにデータを入れて行く場合は良いのですが、リストからデータ
を読む場合や消す場合、LinkedListNodeのPrev/Nextが必要になる
と思うのですが、その場合どの様にすれば良いでしょうか?
0269デフォルトの名無しさん2007/12/02(日) 02:07:05
>>268
LinkedListからLinkedListNodeを取り出したければ、
LinkedListのFirst/Lastプロパティ。ほかFind/FindLastメソッドも。
こっちからLinkedListNodeを作る必要はない。

LinkedListの要素をなめたいだけならforeachにも突っ込める。
0270デフォルトの名無しさん2007/12/02(日) 06:57:57
クラスってもんを勉強しなさい。
そもそも内部構造の詳細を意識しなくても利用できる、
内部構造の違いにかかわらず操作できる、
ようにするためにコレクションのクラスがあるんだから。

LinkedListNodeは構造を意識した直接的な操作も
サポートするために使えるようになってるだけで
コレクションを表すのはあくまでLinkedListの方、使うのも普通はこっち。
0271デフォルトの名無しさん2007/12/02(日) 14:09:05
初期化は
LinkedListNode<string> lln = new LinkedListNode<string>(null);
としておくか、アイテムなければ
= new LinkedListNode<string>(null);
するかでいいんじゃね?
0272デフォルトの名無しさん2007/12/02(日) 14:09:56
訂正

としておくか、アイテムがなければ
= new LinkedListNode<string>(1つ目のアイテム);
するかでいいんじゃね?
0273デフォルトの名無しさん2007/12/02(日) 14:51:04
いや別にLinkedListNode作る必要ないから
LinkedList<string> ll = new LinkedList();
だけでおk
0274デフォルトの名無しさん2007/12/02(日) 17:40:13
ご解答戴いた皆さんありがとうございました。やっと理解出来ました。
LinkedListNode自体がデータを含んでいる実体な訳ですね。
で各LinkedListNodeをLinkedListで繋いでいると。

LinkedListNodeとLinkedListの機能を逆の意味にとられえてたので混乱
してました。
リスト構造の頭と尻尾を自前で管理しようと思って、HeadNode/TailNode
見たいなのを作る為に、LinkedListNodeが存在してる物と思ってたんで
すが、LinkedListのFirst/Lastがその役割をもっててLinkedListクラス内
で自動的に管理されてる訳ですね。

どうもお騒がせ致しました。
0275たろう2007/12/02(日) 18:11:05
質問させてください。
現在googleの検索エンジンの機能をWindowsアプリで作成しようと
思っています。

作成すると言っても検索エンジンを1から作るのでは無く、
実際にはWindowsフォームのTextBoxに入力されたら(入力値を�@とする。) 

Google(http://google.co.jp)画面内の入力エリア
に�@をコピーし、Googleの検索ボタンを自動で押下し、
表示された検索一覧(データ)をWindowsフォーム内に表示したいと
考えています。

WEBページの内容を取得する方法は知っているのですが、
「Google等の検索エンジンに検索値を入力し検索ボタンを
自動で押下して検索データを取得する。」

という方法が分かりません。
何か参考になるサイト等ごございましたらお教え願います。

0276デフォルトの名無しさん2007/12/02(日) 18:13:19
>>275
"http://www.google.co.jp/search?q=�@"
0277たろう2007/12/02(日) 19:13:57
>>276
ありがとうございます。

因みに
 "http://www.google.co.jp/search?q=�@"
といったWEBページのボタンを押した時にWEBサーバに送られる情報
はどの様にして調べているのでしょうか?
何か参考になるWEBサイトをご存知でしょうか?

例えば、Googleについては上記の方法で行ける事は分かったのですが
Yahoo / MSN Serch等も時間に余裕が出来たらチャレンジしてみたいと
思っています。
0278デフォルトの名無しさん2007/12/02(日) 20:37:23
実際に検索してアドレス見ればわかるよw
0279デフォルトの名無しさん2007/12/02(日) 20:46:41
がんばれたろう

とりあえず文字列はUrlEncodeしなきゃだめよ
0280たろう2007/12/02(日) 21:04:40
>>279
ありがとたろう
0281デフォルトの名無しさん2007/12/02(日) 21:32:55
ちゃんと考えてURL円コードしないと駄目よ。
0282デフォルトの名無しさん2007/12/02(日) 21:57:36
現在、2Gくらいの大きなファイルの、
バイナリをあれこれ弄って一つのファイルに書き出そうとしています。
出力時には元のファイルを100KBずつ読み込んで、FileStreamとBinaryWriter を使って、
順次書き出ししようと考えているのですが、
BinaryWriter をCloseしないとファイルに何も書いてくれないという状況です。
どなたか、順次書き出しの手ほどき、よろしくお願いします。
0283デフォルトの名無しさん2007/12/02(日) 22:03:19
よくわからんがFlushすりゃいいんじゃないの?
0284デフォルトの名無しさん2007/12/02(日) 22:05:21
Flushのことか?
0285デフォルトの名無しさん2007/12/02(日) 22:19:54
質問です
埋め込まれたリソースとして動画ファイル(.aviファイル)を埋め込んだのですが、このファイルを再生するにはどうしたらよいのでしょうか?
.wavファイルや.jpgなどはGetManifestResourceStreamでストリームを取得した後、コンストラクタに入れてやれば再生できたのですが
動画クラスって見つからなかったので、どうやって再生したらよいのでしょうか?
MediaPlayerやDirectShowはどうやらファイル名を指定して再生するようで今回のようにストリームから再生することができませんでした。
0286デフォルトの名無しさん2007/12/03(月) 08:00:19
最近thisを記述しなくなったのですが
つけなければアクセスに時間がかかるとか何か不都合がありますか?
0287デフォルトの名無しさん2007/12/03(月) 08:12:19
無いけど付けた方が良い。
0288デフォルトの名無しさん2007/12/03(月) 08:42:46
>>287
ありがとう!早速直します!
0289デフォルトの名無しさん2007/12/03(月) 10:46:56
>>287
その理由を簡単にでも教えてください
0290デフォルトの名無しさん2007/12/03(月) 11:05:13
無いからつけなくてもいい
0291デフォルトの名無しさん2007/12/03(月) 11:05:44
気分
0292デフォルトの名無しさん2007/12/03(月) 11:07:22
どっちがいいなんて正解はない。
状況も聞かずに無条件につけるべきなんていう奴は知らない。
0293デフォルトの名無しさん2007/12/03(月) 11:10:19
拡張メソッドはthisつけないと呼び出せない
拡張メソッドと分けて見やすくする目的だとthisはつけないほうがいい
0294デフォルトの名無しさん2007/12/03(月) 12:11:12
this.を付けないならインスタンスメンバにはプレフィックスを付けることにしたほうがいいと思う
0295デフォルトの名無しさん2007/12/03(月) 12:47:46
m_とか? きめえ
プレフィックスはインテリセンスの利きを悪くするし可読性も落ちるだろ
0296デフォルトの名無しさん2007/12/03(月) 13:07:19
_だろ。
IronPythonのコードがそうなってる。
0297デフォルトの名無しさん2007/12/03(月) 13:21:21
MSの中でも_が多いみたいだよ
C++な人が多いからとか、VB.NETではつけないとプロパティ名と被りやすいから
それに合わせてるとかきっとそういうことだろうけど
0298デフォルトの名無しさん2007/12/03(月) 13:24:16
C#の話をしようぜ
どっちにしろインテリセンスの利きは悪くなる
可読性は_ならたいして落ちないだろうけど
C#の標準命名規則にはそんなんないのだ
0299デフォルトの名無しさん2007/12/03(月) 13:33:06
MS公式のガイドラインがあるのはアセンブリ外から見える名前についてだけだよ
0300デフォルトの名無しさん2007/12/03(月) 13:37:07
とりあえずprivateフィールドは小文字で始めますって書いてなかったか
0301デフォルトの名無しさん2007/12/03(月) 13:45:43
インテリセンスの危機が悪いってのはどういうこと?
0302デフォルトの名無しさん2007/12/03(月) 13:48:32
プレフィックスがあると一文字入力しても全然絞れない
0303デフォルトの名無しさん2007/12/03(月) 13:48:45
>>300
公式には無いよ
「C#コーディング標準」ではプリフィックス付けてもいいとされてるし、
大文字小文字を区別した名前を付けるなとあるから、それを守るんであれば
何か付けないとプロパティと被る
0304デフォルトの名無しさん2007/12/03(月) 14:05:51
あるwebサイトのデータを数秒間隔で取得してフォームに表示したいのですが
sleepで数秒寝かせて無限ループで取得という方法でいいんでしょうか?
0305デフォルトの名無しさん2007/12/03(月) 14:10:19
一定だと怪しまれるからランダムを入れた方がいいかもね
0306デフォルトの名無しさん2007/12/03(月) 14:11:52
>>305
でもその方法だとなぜか重すぎてキャンセルとか受け付けてくれないんですよ
0307デフォルトの名無しさん2007/12/03(月) 14:21:14
>>306
どうせ0秒から3秒くらいのランダムとかして平均1.5秒でアクセスしてるんだろう。
0308デフォルトの名無しさん2007/12/03(月) 14:39:13
つーかメインのスレッドでスリープしてるんだろうw
0309デフォルトの名無しさん2007/12/03(月) 14:47:29
>>308
mainのなかでwhile使って無限ループさせてるんでそうだと思います
guiのプログラミングって何が何だかわからない
0310デフォルトの名無しさん2007/12/03(月) 14:48:47
guiはメインが全部終了しないと動き出さない
0311デフォルトの名無しさん2007/12/03(月) 15:12:18
ジェネレートってどうゆう意味ですか?

教えてくださいお願いします。
0312デフォルトの名無しさん2007/12/03(月) 15:39:33
イタリア風のアイスだよ
0313デフォルトの名無しさん2007/12/03(月) 15:51:42
>>312

それはジェラート。
0314デフォルトの名無しさん2007/12/03(月) 16:19:29
string data = "M-SEARCH * HTTP/1.1\r\nMX: 3\r\nHOST: 239.255.255.250:1900\r\nMAN: \"ssdp:discover\"\r\nST: urn:schemas-upnp-org:service:WANIPConnection:1\r\n\r\n"

もたいな文字列が在る場合。↓みたいな感じで表示するにはどうすれば良いですか?

M-SEARCH * HTTP/1.1\r\n
MX: 3\r\n
HOST: 239.255.255.250:1900\r\n
MAN: "ssdp:discover"\r\n
ST: urn:schemas-upnp-org:service:WANIPConnection:1\r\n
\r\n
0315デフォルトの名無しさん2007/12/03(月) 16:25:33
\r\n→\\r\\n\r\n
0316デフォルトの名無しさん2007/12/03(月) 19:24:06
>>309
夢幻ループ化。

処理をWindowsに返さないといけないんです。
Windowsから仕事しロッテ言われてから動けばいいんです。
自分から動きたい場合は、そのタイミングで呼び出してもらえるように約束を取り付けておけばいいんです。
0317デフォルトの名無しさん2007/12/03(月) 21:27:09
>>309
GUI関係ないだろ・・・
Timer使え
0318デフォルトの名無しさん2007/12/03(月) 21:49:01
すいません質問です。
名前空間は、団体名. 技術名. 分野と記述するのが推奨だと始めて知ったのですが、
普通はこの形式で名前空間定義をしているのでしょうか?
0319デフォルトの名無しさん2007/12/03(月) 21:53:09
そうです。
0320デフォルトの名無しさん2007/12/03(月) 21:59:43
そうでもないよ。
0321デフォルトの名無しさん2007/12/03(月) 22:10:15
楽しいか?
しかし、どこのスレも下らん馴れ合いで嬉しくなっちゃう単細胞な馬鹿が多いな。
0322デフォルトの名無しさん2007/12/03(月) 22:19:57
アンマネージdllはdllimportで呼べるそうですが、これを使えばいちおう理論的には全てのdllを呼べる、というわけでもないんでしょうか?
ググるといろんなサイトや掲示板で、Cなどで作ったdllのimportに苦労してる人がけっこう見つかります。
でも、アドバイスしてる人も“難しい”とは言いますが“不可能”と言ってる人は見かけません。

理論的に不可能ではないが、非常に難しい場合もある、ということでしょうか?
0323デフォルトの名無しさん2007/12/03(月) 22:36:55
>>322
Cのdllなら基本的に難しいことはないと思うが・・・。
C++のクラスライブラリをインポートするのは不可能。
03243222007/12/04(火) 01:13:57
>>323
引数が構造体だったりすると大変にならないですか?
実は以前、他所様のCで書かれたdllを使おうと試みたんですが、
引数の構造体の中身が分からなくて断念したことがあります・・・
私の能力が至らないだけで、本当はできるんでしょうか?

>C++のクラスライブラリをインポートするのは不可能。
え、そうなんですか?すいません、どうして不可能なのか簡単に教えて頂けないでしょうか?
0325デフォルトの名無しさん2007/12/04(火) 01:24:16
C#のここで質問していいか迷うけど
C#でプログラミングしてるからここに。

TcpClient使ってネットワークストリームから出力すると
レスポンスヘッダと内容自体がいっしょくたになるけど
これをレスポンスヘッダと内容を効率よく分解する方法ってない?
TcpClient以外を使うっていうのは無しで。
0326デフォルトの名無しさん2007/12/04(火) 01:29:44
>>324
C++のABIは標準化されてないから
0327デフォルトの名無しさん2007/12/04(火) 02:19:00
>>324
構造体なんて定義すればいいだけだよ
C同士だって構造体の中身がわからなければ何もできないでしょ
03283222007/12/04(火) 02:51:26
>>326
アンマネージなC++クラスライブラリだと駄目ってことでしょうか?
やるとしたら、マネージなのに作り直すか、クラスを使わないようにする、という認識で合ってますか
0329デフォルトの名無しさん2007/12/04(火) 02:55:37
あってる
もちろんクラスをマネージコードとやりとりしなければいいのであって、DLL内だけで使用する分には問題ないよ。
0330デフォルトの名無しさん2007/12/04(火) 03:14:46
C++/CLIでラップすればいいんじゃねえの
0331デフォルトの名無しさん2007/12/04(火) 04:49:49
C++クラスのDLLをC#から直接呼び出すのは、
DllImportのCallingConvention.ThisCallを使えばできるが、
ファクトリや開放用のメソッドが必要になったりで
正直おすすめしない。
03323222007/12/04(火) 06:09:38
>>327
いや、中身が分からないんです。非公開というか勝手に使ってるだけなので。
で、もう一度トライしてみたらできました!朝までかかってしまいましたが・・・
dll内の関数の引数や返り血が構造体のポインタなのですが、C#のほうで適当に
 struct hoge{};
と空っぽの構造体を作ってしまいました。とりあえず正常に動きました!(´∀`)ヤッター
でも、何故これで動くのかあんまりよく分かってないのですが、このまま使って大丈夫でしょうか??
unsafeでやってるので少し不安です・・・

>>329
探したら↓などを見つけました。
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20010&forum=7
COMを使えばクラスライブラリも呼べるようですが、茨の道みたいですね

>>330
無理してコードを変えるより、そのままC++/CLIでラップするほうが楽だし安全、ということでしょうか。
・・・というか、これ使えば何でもできるんじゃ?もしかして相当すごい機能?

>>331
すいません、まだそういうことできるレベルじゃないです。。


もう寝ます。皆様お付きあい頂いて、ありがとうございました。
■ このスレッドは過去ログ倉庫に格納されています