- 1 名前:デフォルトの名無しさん [03/10/04 01:02]
- このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 少しずつC#プログラマを名乗るものが現れました。みなさん一緒に勉強しましょう。 前スレッドはこちら pc2.2ch.net/test/read.cgi/tech/1059028988/l50 (Part4) pc2.2ch.net/test/read.cgi/tech/1047210828/l50 (Part3) pc2.2ch.net/test/read.cgi/tech/1035895873/l50 (Part2) pc2.2ch.net/test/read.cgi/tech/1023766485/l50
- 498 名前:杏仁 [04/11/05 17:39:49]
- 最近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すればいいのでしょうか? お手数ですが、お教えください。よろしくお願いします。
- 499 名前:デフォルトの名無しさん mailto:sage [04/11/05 17:46:06]
- >>498
ref System.UInt32 にする。 (まぁ小さげな値だろうから ref System.Int32 でもいいだろうけど)
- 500 名前:デフォルトの名無しさん mailto:sage [04/11/05 17:53:35]
- System.IntPtrで外部関数のパラメータを定義し
System.Runtime.InteropServices.Marshal.AllocCoTaskMemでメモリを確保、 System.Runtime.InteropServices.Marshal.WriteInt32で確保したメモリに書き込み、 関数に渡す。 結果をSystem.Runtime.InteropServices.Marshal.ReadInt32で読み込んで System.Runtime.InteropServices.Marshal.FreeCoTaskMemでメモリを破棄する。 uint*程度でやる事じゃありません。
- 501 名前:デフォルトの名無しさん mailto:sage [04/11/05 17:58:17]
- 関数がどんな性質なのかにもよるんだよなー。
これがよくもあり悪くもあり。
- 502 名前:杏仁 [04/11/05 18:34:05]
- 回答ありがとうございます。
>>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 回答していただいたのにさっぱり・・・。 もう少し分かりやすくお願いできますでしょうか? 最近始めたばかりで、さっぱり右も左も分からない状態です。 よろしくお願いします。
- 503 名前:デフォルトの名無しさん mailto:sage [04/11/05 18:39:42]
- >>502
ヘルプでrefキーワードぐらい調べようよ〜。 呼び出す時もrefキーワードが必要。 hoge(ref w, ref h); 500はただのジョークだから。こんな手段もあるよってだけ。 //と最後の行で言ったつもりだったんだけど。
|

|