トップページ⇒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
0449デフォルトの名無しさんNGNG
>>448
わけあってDataGridをListViewのように使ってるんです。

で、残念ながらそのコードだと、ソート前のDataRowしか取れませんでした。
0450デフォルトの名無しさんNGNG
あー、そういうことか。
主キーのところの値が完全一致するのを探せば良いんじゃない?
//カラムの並びを入れ替えられるとお手上げかな。
0451デフォルトの名無しさんNGNG
>>450
やっぱりそういう力技しかないんですね・・・。カラムの並び替えは無しの方向でやってます。
ありがとうございました。
0452デフォルトの名無しさんNGNG
>>446
CurrencyManagerを使えばできないかな
0453デフォルトの名無しさんNGNG
ふとどぼんを見に行ったらこんなのもあったが。
ttp://dobon.net/vb/dotnet/datagrid/currentrow.html
0454デフォルトの名無しさんNGNG
Socket.Send()を利用するため、XmlSerializerでシリアル化したオブジェクトをバイト配列にコンバートして
Send()につっこみたいのですが、XmlSerializerの引数はstream用でバイト配列にする方法が見つかりません。
やっぱできないのでしょうか。。。。
0455デフォルトの名無しさんNGNG
MemoryStream ms = new MemoryStream();
xmlSerializer.Serialize(ms, obj);
byte[] bytes = ms.ToArray();
socket.Send(bytes, 0, bytes.Length);

ということかな?
0456デフォルトの名無しさんNGNG
>>454
MemoryStream
0457デフォルトの名無しさんNGNG
455のsocket.Send、パラメータをStream.Writeと勘違い……。
0458454NGNG
>>455,456さん
ありがとうございます、MemoryStreamをつかうんですね
ためしてみます(`・ω・´)
0459デフォルトの名無しさんNGNG
.net2で質問なんですけど、、、
this.TopMost = !this.TopMost;
とやると常に手前にしたときにメインメニューのドロップダウンの部分が
フォームの下に隠れちゃうんですけど何がいけないんでしょうか。。。?
0460デフォルトの名無しさんNGNG
Visual Studioで使われているようなタブコントロールを作りたいのですが、
あれはSystem.Windows.Forms.TabControlからの継承で作れるものなのでしょうか。

サードパーティ製のものもあるにはあるのですが、
せっかくなので自分で作ってみたいのです。
0461在日外国人参政権反対NGNG
>460
自分で気合で描画することを進めます。
0462454NGNG
たびたびすいません、454です
>>455を参考にやってみましたが、うまくいかず(´・ω・`)

デシリアライズはこれでいいんですよ・・・ね・・・?

MemoryStream msRead = new MemoryStream();
XmlSerializer readSerializer = new XmlSerializer(typeof(Obj);
msRead.Write(byteAry,0,byteAry.Length);
Obj obj = (Obj)readSerializer.Deserialize(msRead);
msRead.Close();
0463デフォルトの名無しさんNGNG
>>462
MemoryStream msRead = new MemoryStream();
XmlSerializer readSerializer = new XmlSerializer(typeof(Obj);
msRead.Write(byteAry,0,byteAry.Length);

msRead.Position = 0;      // コレ追加よろ

Obj obj = (Obj)readSerializer.Deserialize(msRead);
msRead.Close();
0464454NGNG
>>463
おぉぉ、うまくいったー
ありがとうございます
Position指定必要だったんですね・・・・まったく気づかなかった(つД`)
0465デフォルトの名無しさんNGNG
>>461
ちまちまやってみますわ。

.net 2.0になっても各種コントロールはショボイままだった…。
幾つか良くなったのもあるけど。
0466デフォルトの名無しさんNGNG
CSVから読み込んで、datasetに収まってる
7995.005229
とかを少数以下は無視していいのでintにしたいのですがどうすればいいですか?
Convert.Tointが使えなくて困ってます。(少数いかにも数字があるから?)
0467デフォルトの名無しさんNGNG
>>466
doubleにしてからintに落とせば?
0468デフォルトの名無しさんNGNG
>>465
基本的に言語のライブラリはOSが提供するUIに口出ししないし、するべきではありません。
そういうのはサードパーティの仕事です。
0469デフォルトの名無しさんNGNG
そのサードパーティのライブラリでよく使われる?ActiveReport
やFlexGridなどの解説本を探してみたのだが、全然見つからないね。

ヘルプだけ見て使いこなせということなんだろうか。
0470466NGNG
>>467
いけました。ありがとうございました
0471デフォルトの名無しさんNGNG
>>468
まぁ今の".NET Framework"はそうかもしれないけど、
いずれWindowsのAPIになっていくわけでしょ。

そうするとやっぱりWindowsが提供するネイティブコントロールは
しょぼいってことになるわけで、そろそろどうにかならないものかとは思う。
0472デフォルトの名無しさんNGNG
>>469
VS標準のCrystalReportも日本語だとあまり情報ないよね。

仕事で作るような帳票類はGDIでゴリゴリ書いてる時間ないから
しかたなく使ってるけど、正直"たぶんこうやって使うんだろう"の世界。
0473在日外国人参政権反対NGNG
>468
Windows.Formsにまとめてるのはその意図を汲んでのことだろう。
だからこそそれを拡充させてほしい気はする。
0474デフォルトの名無しさんNGNG
リストボックスから条件に見合ったオブジェクトを削除したいのですが、

foreach ( UserList logoutUser in listBox1.Items )
{
if ( recMessage.TargetUserID == logoutUser.UserGuid )
{
listBox1.Items.Remove(logout);
}
}

と書くと

System.InvalidOperationException:
この列挙子が連結されている一覧は変更されています。
列挙子は、一覧が変更しない場合に限り使用できます。

とゴルァされるのですが、いい方法ないでしょうか・・・。
0475デフォルトの名無しさんNGNG
あ、最後のところRemove(logoutUser)でつ
0476デフォルトの名無しさんNGNG
そりゃ列挙中に肝心の列挙するコレクションが変わってしまっては話にならないだろ。
forで回してやるとかしな。
0477474NGNG
ありがとうございました。
1回ブツが釣れれば十分なのでbreakかましたらうまくいきました

吊ってきますorz
0478デフォルトの名無しさんNGNG
「すれ立てるまでもない質問・・・」に書き込んだら怒られてしまいました。
同じ内容ですが、こちらに書かせてください。

VS.NetのC#でプログラム作ってるんですが、データセットから
テキストボックスにバインドする方法が分からないんです。
といっても、よくあるデータテーブルの列単位でバインドするやり方ではなくて
データテーブルのある条件に合致するレコードの項目をバインドしたいんです。

例えば

Key 列1    列2
001 1AAA 1BBB
002 2AAA 2BBB
003 3AAA 3BBB
004 4AAA 4BBB
005 5AAA 5BBB

みたいなデータテーブルから、TextBoxにはKey=003の条件によって
列1の内容(3AAA)をバインドしたいんです。
もちろん、バインドするからには変更結果も反映されていてほしいんですが・・・

お願いします。
0479デフォルトの名無しさんNGNG
ふと思ったんですけど、

using System.Windows.Forms;

という感じにしておいた部分を

using System.Windows.NewForms;

とかに書き換えることで、クラス構成をそっくり新しくする事って邪道ですか?
0480デフォルトの名無しさんNGNG
オレ的には邪道
0481デフォルトの名無しさんNGNG
>>479
その場合、

using System.Windows.Forms;
↓
using No479.Windows.Forms;

みたいに企業名(Systemの部分)を変えたほうがいいんじゃないか。

ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpgenref/html/cpconnamespacenamingguidelines.asp
0482479NGNG
>>481
ちゃうちゃう

System.Windows.Forms と System.Windows.NetForms の中に、
型は同じだけど挙動の異なるクラスがあったときに、
using 文でどちらを採用するか切り替えるのは邪道かな?って事
0483479NGNG
>>482
別に名前空間名はなんだって良いんだが
0484デフォルトの名無しさんNGNG
>>482
そういうクラスが大量にあるソースを目の前にしたときに激しい絶望感に襲われるのでやめてください。
using書いてるのにnamespaceフルに書いて別のnamespaceのクラスを使用されたりして混沌に拍車がかかったりします、してます……
0485479NGNG
何となく分かりました。皆さんも回答有難う御座います

>>484
がんがって下さい orz
0486デフォルトの名無しさんNGNG
>>484
using Hoge = System.Windows.Forms;
Hoge.Form = new Hoge.Form();
で随分楽になると思うけど。

まあ479みたいなのは見たくもないと言うのはよく分かる。
0487デフォルトの名無しさんNGNG
>479
そういうののためにAbstractFactoryとかあるとおもうのだけど。
あれは切り替えできるとともに、システム上での選択肢をひとつに強制するという使い方でもある。
ソースごとにusingで切り替えられるのは>>484のいうとおりたちの悪いバグの元。
0488デフォルトの名無しさんNGNG
FormクラスのActivate()メソッドを使用してます
>>アクティブなアプリケーションであるフォームをアクティブにした場合は、そのフォームが最前面に移動します。
>>アクティブなアプリケーションではないフォームの場合は、そのフォームのウィンドウ キャプションが点滅します。

とあるのですが、他のアプリケーションに切り替えてるときにこのメソッド呼び出されると、最前面に来る場合があるのですが、
他のアプリケーションにフォーカスしている ≠ その他のアプリケーションのフォームがアクティブである
ということなのしょうか・・・?

MSNメッセンジャーのように、通知が来たときに点滅するだけでいいのですが、
これってWin32API叩くしかないんでしょうか・・・。


0489デフォルトの名無しさんNGNG
>>488
なるねー。
.NET2.0ならFlashメソッドってのがあるんだけど。
0490488NGNG
1.1じゃムリかなぁ(つД`)
0491デフォルトの名無しさんNGNG
VSの画面にはドッキングウィンドウなどありますが、あのコンポーネントは何処にありますか?
あの画びょうのマークのついたドッキングウィンドウ・コンポーネントと、
プロパティを設定するためのコンポーネント(VS右下の、Nameとか設定できる奴)を
探していますが見つからない。
0492デフォルトの名無しさんNGNG
>>491
とりあえず
>  プロパティを設定するためのコンポーネント(VS右下の、Nameとか設定できる奴)を
はPropertyGridだな。こいつは.NET Framework標準。

ドッキングウィンドウは……the Code Projectにあったようななかったような。
0493デフォルトの名無しさんNGNG
richTextBox1.AppendText( recMessage.ToString() + " : " + recMessage.Message + "\r\n" );
を
richTextBox1.AppendText( recMessage.ToString() + " : " /* + recMessage.Message + "\r\n" */);
string[] splString = recMessage.Message.Split(new char[] {'#'});
for ( int count = 0 ; count + 1 <= splString.Length ; count++ ){
if ( count != 0 ){
String colorCode = splString[count].Substring(0,1);
switch ( colorCode ){
case "1":
richTextBox1.SelectionColor = System.Drawing.Color.Blue;
richTextBox1.AppendText(splString[count].Substring(1));
break;
(中略)
default :
richTextBox1.AppendText(splString[count]);
break;
}
}else{
richTextBox1.AppendText(splString[count]);
}
}
richTextBox1.AppendText("\r\n");
}
にしたところ、エラー音が出るようになりました(処理は正常に行われてるっぽい) なぜでしょう・・・?
0494デフォルトの名無しさんNGNG
>>491
DockPanelSuite http://sourceforge.net/projects/dockpanelsuite/
無償でオープンソース。現在ベータ版で、メニューの統合がうまくいかないなどバグが残る。

DotNetMagic http://www.dotnetmagic.com/
機能的にはおそらく最強。でも有償。

MagicDocking http://www.codeproject.com/cs/miscctrl/dockingmanagerextender.asp
DotNetMagic の旧バージョン。ライセンスはよくわからん。
SharpDevelopに使われるなど実績あり。

Docking Suite http://www.divil.co.uk/net/controls/dockingsuite/
現在ベータ版。非商用利用に限り無償。

代表的なところでは、こんなものか。見た目や動きが微妙に違うので、実際に使ってみて選んだ方がいい。
0495デフォルトの名無しさんNGNG
鯖から非同期に送られてきたデータをバックグラウンドで取得し、イベントとして通知するようなライブラリ作ってます

1:TcpClient を使っているとき、サーバから切断されたことをすぐに知るにはどうすればいいか
2:異常切断されたときイベントなどで通知することを考えているが、
  通常切断したときも同じイベントを発行したほうがライブラリを使う側にとって便利なのかどうか

ちょっとアンケートがましいですが意見をお聞かせくださいm(_ _)m
0496デフォルトの名無しさんNGNG
プログラム歴2ヶ月で答えると叩かれそうだが・・・

1,
byte[] byteAry = 受信データ;
if ( byteAry.Length <= 0 )
{ パイプカット }

2,
ライブラリがエラーの処理をどこまでするかによるんじゃないでしょうか

でしゃばってスマソ
0497デフォルトの名無しさんNGNG
>495
1.物理的に切断を瞬間的に不可能。
  TCPのキープアライブ使ってもいいが融通がきかん、自分でキープアライブパケット投げるようにしておけ。
2.同じイベントでも(・∀・)イイ!!が、通常なのか異常なのかわかるようにしておけ。エラー原因などもプログラムで扱えるよう定義してふんだんな情報を送っておけ
  
以上。
0498杏仁NGNG
 最近C#を始めました。良く分からないので質問させてください。
いま、Cで作成されたDLLをDllImportで呼び出しています。
 そのDLLの仕様を見ると関数は

  void hoge(UINT *pWidth, UINT *pHeight);

 とポインタで呼び出していました。

[DllImport("hogehoge.dll")]
public static extern void hoge(int w, int h);

としても当然うまくいきませんでした。
C#でこのような場合ようやってDllImportすればいいのでしょうか?
お手数ですが、お教えください。よろしくお願いします。



0499デフォルトの名無しさんNGNG
>>498
ref System.UInt32 にする。
(まぁ小さげな値だろうから ref System.Int32 でもいいだろうけど)
0500デフォルトの名無しさんNGNG
System.IntPtrで外部関数のパラメータを定義し
System.Runtime.InteropServices.Marshal.AllocCoTaskMemでメモリを確保、
System.Runtime.InteropServices.Marshal.WriteInt32で確保したメモリに書き込み、
関数に渡す。
結果をSystem.Runtime.InteropServices.Marshal.ReadInt32で読み込んで
System.Runtime.InteropServices.Marshal.FreeCoTaskMemでメモリを破棄する。

uint*程度でやる事じゃありません。
0501デフォルトの名無しさんNGNG
関数がどんな性質なのかにもよるんだよなー。

これがよくもあり悪くもあり。
0502杏仁NGNG
 回答ありがとうございます。

>>499
> ref System.UInt32 にする。

[DllImport("hogehoge.dll")]
public static extern void hoge(ref System.UInt32 w, ref System.UInt32 h);

ということでしょうか?この場合、どうやって呼び出せばいいのですか?
int w=0;
int h=0;
hoge(w,h);
としてもうまくいきません。


>>500
回答していただいたのにさっぱり・・・。
もう少し分かりやすくお願いできますでしょうか?
 最近始めたばかりで、さっぱり右も左も分からない状態です。
  よろしくお願いします。
0503デフォルトの名無しさんNGNG
>>502
ヘルプでrefキーワードぐらい調べようよ〜。
呼び出す時もrefキーワードが必要。
hoge(ref w, ref h);

500はただのジョークだから。こんな手段もあるよってだけ。
//と最後の行で言ったつもりだったんだけど。
0504デフォルトの名無しさんNGNG
>>502
蛇足の補足。たぶんこの場合は関係ないだろうけど、ポインタ値が指す領域にある値だけではなく、
そのものに意味がある場合には、System.IntPtr 型にしておいて、ポインタの指す先のアクセスは
>>500 風にやるようなこともある、ってのが >>501 ね(たぶん)。

例えば hoge の正体が hoge(UINT* w, UINT* h) { delete [] w; delete [] h; } みたいな場合とか。
0505デフォルトの名無しさんNGNG
>>そのものに意味がある
 ↑
「ポインタ値そのものに意味がある」の編集ミスですた。
0506デフォルトの名無しさんNGNG
this.pictureBox1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseWheel);
private void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
{
Console.WriteLine(e.Delta);
}
と記述してるのですが、マウスホイールくるくるしてもpictureBox1_MouseWheelイベントが発生してくれません。

そもそもなんで、MouseWheelだけは手動で書かないといけないのかと(ry
0507デフォルトの名無しさんNGNG
>>506
Console.WriteLine();を、MessageBox.Show("","");
にしても駄目?
0508506NGNG
だめっぽいです
ブレークポイントしかけても反応してくれません。
Panelの上に張ってるのでPanelにもイベントハンドらを記述したのですが
どっちもイベントが発生しないみたいです。

0509デフォルトの名無しさんNGNG
>>508
>Control.MouseWheel イベント
> コントロールにフォーカスがあるときにマウス ホイールが動くと発生します。

PictureBoxやPanelはユーザの通常操作ではフォーカスを得る事はない。
0510508NGNG
なるほど。 
Mouse_EnterしたらFocus()するようにするとうまくいきました。
お騒がせしました。
0511デフォルトの名無しさんNGNG
今C#の文法書を読んで勉強中なんですが
文法などを一通り理解したら次は何をすべきなんでしょうか?
guiアプリケーションを作れる人は文法などを理解したら次は何をしたんですか?
0512デフォルトの名無しさんNGNG
作りたいアプリを作りつつ
GUIパーツをいろいろ試したり細かいプロパティ・メソッドを調べたり
非GUIなクラスの使い方を覚えたりどんなクラスが存在するのかを調べたり。
0513デフォルトの名無しさんNGNG
>>511
作りたいものを作れ。手を動かせ。
「習うより慣れろ」ということわざがあるが、
プログラミングの場合「習ったら慣れろ」ってところか。
0514デフォルトの名無しさんNGNG
わからないことがあったらここに質問しにきていいんですかね?
タブ型メモ帳を作ろうとしてお世話になったのが自分なのですが。
MSDNライブラリをみながら作るだけではちょっとムリがあるかなと思いました。
0515495NGNG
>>496-497
亀ですが�dくすです。

む〜。実際にデータ送らないと切断検出できないですか〜。
送信、受信が別スレッドに分かれているんで、リターンを待つ同期に一苦労^-^;
0516デフォルトの名無しさんNGNG
>>515
送信と受信を一つのスレッドでやるとエライ事になるよw
あとTcpClientは結構ゴミだからクライアントアプリでもSoket使った方がいいかも。
0517495NGNG
>>516
>クライアントアプリでもSocket
具体的にどのような点が優れているんですか?
ちょっとワカラン orz
0518デフォルトの名無しさんNGNG
>>517
NetworkStreamでしか送受信出来ない、細かい制御(受信側のみ切断とか)も出来ない
ついでに非同期送受信も出来ない・・・
TcpClientで作っても後々書き直すことになると思うw
0519495NGNG
>>518
ラジャ^-^;
0520495NGNG
あ〜送受信系統を1つのクラスに押し込めて置いてよかったw
このクラスの中身だけ変えればおkだわ
0521デフォルトの名無しさんNGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1003826049&res=81&fi=no

こんな感じで送受信してます、たまにデータが続けざまに来るとエラーでるんですが、どうしたらよいでしょう・・・。
0522デフォルトの名無しさんNGNG
えーと・・・
BeginReceiveしてEndReceiveした後は、また非同期受信するなら再度BeginReciveしないと駄目なような・・・
それにこの用途ならNetworkStream使った方が楽かも・・・(俺ならそうするw)

あと、一度の受信でバッファ全部捨ててるけど、
非同期受信は何バイト受信するかわからないから、先取りしたデータは捨てるんじゃなくて
プールしてその上でさらにバッファを貯めるみたいにすべき。

あと(ぉ終了処理はShutdownの後でCloseしよーw
0523521NGNG
了解です!(BeginRecieveするメソッドにソケット渡し忘れてた・・・(/ω\))
NetworkStream調べてみます〜

>あと、一度の受信でバッファ全部捨ててるけど、
>非同期受信は何バイト受信するかわからないから、先取りしたデータは捨てるんじゃなくて
>プールしてその上でさらにバッファを貯めるみたいにすべき。

int recBytesSize = socket.EndReceive( ar );
↑で受信データサイズ抜いた時点で必要とするbyte配列は確定してない・・・ということですか?
0524495NGNG
何か似たような事やっている人がいるなぁ ^-^;
おまいは俺か?
0525杏仁NGNG
>>498-503
ありがとうございました。おかげで動作しました。
もう一つ質問なのですが、DLLの仕様を見ると
 BYTE *HOGE()
という関数があります。
この場合は、どうやって呼び出せばいいでしょうか?
よろしくお願いします。
0526521NGNG
>>495
あなたの子よ!認知してよ!

非同期NetworkStreamのサンプル見つからない(MSDNのだと断片的でわからず・・・)
0527デフォルトの名無しさんNGNG
ところで Bigin〜 したら必ず End〜 しなきゃいけないの?
やりっぱなしじゃ駄目?
0528527NGNG
凄く打ち間違い orz
0529デフォルトの名無しさんNGNG
ランダムにping送って、応答があった場合、応答先のPCのNICのMACアドレスを取得する方法ってありますか?
0530デフォルトの名無しさんNGNG
よく分からないけど通報しますた
0531デフォルトの名無しさんNGNG
ブロードキャストがしたいんじゃないかな…
0532デフォルトの名無しさんNGNG
ARPのことなのだろうか・・・・

それとも今世界のどこかから自分のMAC抜かれたいのだろうか
0533デフォルトの名無しさんNGNG
マックでバーガー三つ買って来るか・・・ハァ・・・
0534デフォルトの名無しさんNGNG
漏れのもたのむ
0535デフォルトの名無しさんNGNG
>529
pingパケットにその情報があるか見てみれば?
0536デフォルトの名無しさんNGNG
C#のクラスを継承してManageC++のクラスを作りたいんですが、
メンバ関数のオーバーライドがうまくいきません。

C#のクラス↓
public abstract class ClassCS
{
public abstract void Func(ref int c);
}

void FuncC(int __gc& C) や void FuncC(int &C) ではだめでした。
この関数FuncをオーバーライドするにはC++でどのように記述すればいいんでしょうか?



0537デフォルトの名無しさんNGNG
>>525
それはもう関数次第としか言えない。
>500みたいなことをする可能性が高いが。

>>536
ええとポインタを引数に取るんだからvoid FuncC(int* c)じゃないのかな。
0538デフォルトの名無しさんNGNG
>>535
それだと、同一ネットワーク内ならOKだけど、L3装置かましたときに中継点のMACになるような
0539杏仁NGNG
>>537
>それはもう関数次第としか言えない。
 画像バッフアのアドレスが格納されて帰ってくる関数みたいなのですが・・。

> >500みたいなことをする可能性が高いが。
・・・・。大変そうですね。私にできるかどうか・・・。
 サンプルとか参考になるサイト等ありますでしょうか?
0540デフォルトの名無しさんNGNG
>>539
関数次第なんだからサンプルも何もないと思うけど?
0541デフォルトの名無しさんNGNG
>>539
 unsafe で IntPtr を byte* にでもキャストして、画像バッファのメモリをアクセスすれば良いと思う。
メモリの中身にアクセスする必要がないなら、IntPtr で受け取っておいて、他に渡す必要があるなら
また IntPtr で渡してあげるだけ。

Susie のプラグインを C# から使いたいとか、そういうことですか?
0542杏仁NGNG
>540 541
 解答ありがとうございます。
 ん〜。勉強不足で折角の解答の意味があまり理解できずに申し訳ありません。
 とりあえず、IntPtrをもう少し勉強してみます。

>Susie のプラグインを C# から使いたいとか、そういうことですか?
画像入力ボードのDLLを使って画像の取り込みを行いたいと思っています。
0543デフォルトの名無しさんNGNG
此処で質問して良いのかどうか、ちょっと不安なのですが・・・

現在、既存システム(C+VB6)をC#で移植しています。
既存システムはVB6でユーザインターフェースを作り、
CでDLLを作って、VB6からDLLを呼び出しています。

VB6のインターフェース部分は特に問題無くC#に移植できたのですが、
Cで作ったDLLの関数が結構多く、またC#から呼び出すのも厄介な状況です。

MSの技術情報でWin32APIと.NETFrameworkの対応表で幾つかはそのままC#で実装しましたが、
残りのDLL関数をManagedC++でDLLを再度作り直し、そのDLLをC#から直接使う事になりました。

そこで質問なのですが、ManagedC++でSTLのmapを使いたいのですが、
コンパイル時にエラーとなってしまいます。
ManagedC++ではSTLなどテンプレートを使う事はできないのでしょうか?
また、ManagedC++で作った関数で、.NETのHashtableなどを返す関数は作れないのでしょうか?
0544デフォルトの名無しさんNGNG
>>543
managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/

//沈んでるなぁ……。
0545536NGNG
>>537
>ええとポインタを引数に取るんだからvoid FuncC(int* c)じゃないのかな。
返答ありがとうございます。
試してみましたが、うまくいかないようです。

自分でもいろいろ試してみて、Manage C++側はFunc(int __gc &c)になるはずだと思ったんですが、
下のプログラムを実行すると『抽象クラスまたはインターフェイス 'CPP.CPP' のインスタンスを作成できません。』といったエラーが出ます。
CPPのFuncをオーバーライドできてないってことだと思うんですが、どうすればちゃんとオーバーライドできるんでしょうか?

Manage C++↓
namespace CS
{
public abstract class CS
{
public abstract void Func(ref System.Int32 c);
}
}

C#↓
namespace CPP
{
public __gc class CPP : public CS::CS
{
public:
void Func(int __gc &c){}
};
}

static void Main(string[] args)
{
CS.CS S = new CPP.CPP();
}
0546デフォルトの名無しさんNGNG
突然ですがお知らせです。

大阪(西梅田)、新宿(JR駅前)のそれぞれ一等地に
拠点を構え、業績急上昇中!未経験者大募集中!の
ソフトウェア開発会社
グリーンシステムを応援するHPです。
http://www.geocities.jp/grs_hp/

このスレの読者の人のような、レベルの高い人にぴったりかと
思います。

最高の会社にするため、みんな頑張ってます!
0547デフォルトの名無しさんNGNG
このスレの読者の人のような、デンパレベルの高い人にぴったりかと
思います。

最高の会社にするため、みんな頑張って2chに投稿してます!
0548デフォルトの名無しさんNGNG
>>546
俺はチョコレート嫌いでチーズケーキ好きだから無理ぽ(´・ω・`)
■ このスレッドは過去ログ倉庫に格納されています