[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/28 05:52 / Filesize : 228 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part51



1 名前:デフォルトの名無しさん [2009/02/04(水) 23:26:55 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part50
pc11.2ch.net/test/read.cgi/tech/1229661915/l50

Visual C# 2008 Express Edition 日本語版
www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

その他テンプレ>>2-5くらい

892 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 20:50:03 ]
>>891
レスありがとうごいます。
昇格起動とは管理者権限で実行ということでしょうか?

AdministratorでログインしUACをオフ、devenv.exeを右クリックから管理者として実行を選択しましたが、
依然として「アクセスが拒否されました」になってしまいます。。。

893 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 20:58:17 ]
>>892
ありゃ、とりあえず昇格すれば大丈夫だった気がするが。
まぁ駄目ならしゃーない。利便性落ちるけどこの手で。
プロジェクトの Properties
 → デバッグ
 → Visual Studio ホスティングプロセスを有効にする
のチェックをはずす。デバッグなしでいけるならこれでどうよ。
これで駄目ならセキュリティとかゾーンの設定見直してとしか
いえん

894 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 21:12:13 ]
>>893
ホスティングプロセスのチェックを外したところうまく動きました。
現在のところホストプロセスを無効にしても、あまり問題はないようなのでこれでいこうと思います。
ありがとうございました。

895 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:31:48 ]
APIスレの方が良いのかもしれませんが、教えて下さい。
WndProcでWM_KEYDOWNが発生したときに、
StrKey = new StringBuilder();
GetKeyNameText(msg.LParam, StrKey, StrKey.Capacity);
として押されたキー名を取得しているのですが、例えば「Ctrl+A」の時など
StrKeyにCtrlが入ってしまい、「A」が取得できません。
※AやShift+A、Alt+Aの時などは普通に拾えます。

WParamにはAを示す値(65)が入っているので何か方法はあるのでは
無いかと思っているのですが…。宜しくお願いします。

896 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 08:59:45 ]
と、思いましたが、色々調べたところGetKeyboardStateで
Ctrl+A押下時のイベントが発生していないようでした。
Ctrl+B等は問題無いのですが…。TextBoxを継承しているのが問題なのか…。
もう少し色々調べてみます。失礼しました。

897 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 10:34:41 ]
SelectAllのショートカットになってるからじゃ?
ShortCutsEnabledをFalseにしてみるとか

898 名前:895 mailto:sage [2009/03/24(火) 11:23:25 ]
解決しました。↓が参考になりました。
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/243winkeyproc/winkeyproc.html
結果的に、WndProcで行っていた処理をProcessCmdKeyに移すだけで
解決できました。失礼しました。

899 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 11:33:54 ]
スレ汚しの質問すみません。
ブラウザの仕組みについてなんですが

ブラウザはどうやって同一タイミングでターゲットURLのHTTP情報、
さらにHTTPを解析してその先にある画像データの取得を一意的に行っているのでしょうか。
それをC#でIEコントロールを用いずに実現する方法はありますか?

たとえば今HttpWebRequestを使って試しているのですが
これでは1インスタンスにつき HttpWebRequest req = new HttpWebReqest.Create(url);
といった具合に一つのURLしか指定できません。

これによってサイト全体のHTTPをゲットする事が出来るのですが
1画像を取得しようと思った時には、その画像のURLをもって別インスタンスでCreateしなければならないんですが

一つのリクエストで全ての画像、サイト全体のHTTPを取得する方法はありませんか。
どなたか知恵をお貸しください。

900 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 11:40:52 ]
無理
自分で作るか誰かが作ったのを使うしか。
サイト全部取得は場所によってはアクセス遮断されるかも。



901 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 11:49:55 ]
一つのリクエストである必要性がどこにあるのか
って単に手抜きたいだけか

902 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 11:57:49 ]
>>901
セッション管理を行っているサイトにリクエストした場合に
1セッションと認めさせたいからです。

903 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 12:01:39 ]
ブラウザだって一つのリクエストで全部取ってきてるわけじゃないんだから
// KeepAliveで接続自体は一つかもしれんが
セッションとは関係ねーよ

904 名前:899 mailto:sage [2009/03/25(水) 12:03:05 ]
というか、セッション管理をしているサイトというのは
やはりリクエストごとに別セッションと認識する物なんでしょうか。

要は1セッションと認めさせる事が出来、なおかつIEコントロールを使わない方法があれば
HttpWebRequest以外でもなんでもいいんですが・・・><;

905 名前:899 mailto:sage [2009/03/25(水) 12:04:35 ]
>>903
ああ!やはりそうなんですね!
一つのリクエストじゃないのですねー。
keepAliveを使えば接続は一つになるのか〜!ふむふむ!


906 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 12:41:57 ]
取り敢えず適当なパケットモニタでも入れて送受信の様子を眺めてれば

907 名前:899 mailto:sage [2009/03/25(水) 13:40:04 ]
>>906
なるほど・・・!
それは思いつきませんでした!
ありがとうございます!やってみます。

908 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 17:34:36 ]
出来るだけ高速なファイル処理がやりたいのですが教えてください。
現在

[serializable]
public class A
{
 public int id;
 public datetime date;
 public long data;
 public long data2;
}

のようなクラスが存在し、これを50mSec程度の間隔で追記だけを行います。

このファイルには60万件のクラスAが入る可能性があります。
このとき出来るだけ高速に書き込む方法を教えて頂きたいのです。

また、この書きこんだクラスAの入ったバイナリファイル(60万件)を
例えば List<A> にデシリアライズ?してやるにはどうすればいいのでしょうか?

909 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 17:37:38 ]
DB使えよ、ってのは駄目なのか

910 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 17:52:59 ]
シリアライズせずにそのままバイナリデータを書き込んで、
読み込み時にbinaryReaderで読み込見ながらAddしたほうがいいような・・・



911 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 18:06:25 ]
その程度のクラスなら、自前でバイナリシリアライズを実装すれば十分な速度が得られそうだ。
俺ならSQLite使うけど。

912 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 18:38:42 ]
>>909-901
レスありがとうございます。

DBに関してはちょっと使えないのです。
>>910と>911を組み込んでみてチェックして速度が出る方を選んでみます。
ありがとうございました。



913 名前:デフォルトの名無しさん [2009/03/25(水) 20:49:33 ]
WebBrowserで表示しているコンテンツ内のボタンをクリックして
何かの動作が始まって、それが何かのエラーを起こして制御が
返ってこない場合があり、その結果アプリケーション本体がハング
アップしてしまうことがときどきありました。こういうケースでもその
状態から復帰して他の作業ができるようにしたいのですが良い方法
があれば教えて頂きたく。何卒よろしく。

914 名前:デフォルトの名無しさん [2009/03/25(水) 20:57:08 ]
WebBrowser内のコンテンツ上でボタンクリックなどでスクリプトか何か
なのか、あるいは返信待ちなのか、何らかの動作をしているときに
エラーが起きて制御が返って来ないまま、アプリケーション全体が
キーもマウスも受け付けなくなる時があり、対策をどうするべきかわからず
困っております。WebBrowserの外からそうした動作を監視していて
一定時間たったらどうなったか調べるなどといったことをするべきなのか、
あるいはなんらかの方法でそういう応答なしになった状態から復帰可能
なのか、わかっていないのですがアドバイスもしくはご解説をいただけたら
ありがたく。よろしくお願いします!

915 名前:913, 914 mailto:sage [2009/03/25(水) 21:03:02 ]
すみません、JaneDoeStyle使っているのですが、書き込みした後で
何度かリロードして確認しても反映されておらず、しかも書き込みした
内容がエディタに残らなかったため、同じ質問を再度書いて送信して
こうなってしまいました。再掲申し訳ありません。

916 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 00:20:58 ]
Formを半透明にすることなどは簡単に出来るのですが
半透明のグラデーションは出来ますか?
具体的に言うと、四角いフォームの場合一番上が不透明で
下に行くに従って透明度が増していく感じのフォームを作りたいのです。
よろしくお願いします。

917 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 01:08:16 ]
Layered Window と UpdateLayeredWindow 使う方法が思いつくけど、
Form じゃ無理かなぁ。いや、無理というより意味がないというか…。

918 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 01:10:09 ]
>>916
www.codeproject.com/KB/miscctrl/AlphaForm.aspx

919 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 01:53:37 ]
XmlReaderで現在の行数を取得することって出来ませんか?


920 名前:デフォルトの名無しさん [2009/03/26(木) 03:25:35 ]
質問です。
XmlSerializerを用いて、プログラム内のオブジェクト構造を元に
データの保存と読込を行っています。

このXmlSerializerで、同じオブジェクトを指す複数の参照変数を
シリアライズすると、シリアライズ化されたデータには
その参照数分のデータが重複して書き出されてしまいます。
このオブジェクトを、実際にシリアライズによって書き出されるデータは一つだけとし、
デシリアライズの際に参照変数群へ同じインスタンスへの参照が入るようにしたいです。

一応、あまり良い方法ではないと思うのですが、
複数参照されるオブジェクトは専用にシリアライズされるコンテナに全て格納、オブジェクトのID付けをし、
複数参照されるオブジェクトの変数と対に、そのオブジェクトのIDを持つシリアライズ対象なプロパティを定義し、
そのIDプロパティのsetterにおいてIDを元に、既にデシリアライズされているコンテナから該当オブジェクトを
取り出して変数にセットする、という方法をこれまで取っていました。

これを行うもっと正しい感じの方法はありますでしょうか?ヒントだけでも頂けると有り難いです。



921 名前:デフォルトの名無しさん mailto:sage [2009/03/26(木) 09:02:37 ]
>>920
とりあえずIXmlSerializableを実装して同じことを行えば隠蔽できる
もっと賢いやり方があったら俺も知りたいな

922 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 08:50:14 ]
>>919
IXmlLineInfoにasキャストしてみる

923 名前:デフォルトの名無しさん [2009/03/27(金) 10:40:24 ]
>>914の件、どなたかアドバイスかヒントでもいただけたらありがたく。

924 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 10:46:18 ]
32bit環境でつくってたプログラムのソースを64bit環境にもちこんでコンパイルして実行した場合、
挙動が異なったりする可能性はありますか?

925 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 10:48:34 ]
ありまqす。

926 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 10:48:35 ]
>>922
出来ました
しかしインターフェイスにキャストしてどうしてちゃんと行番号が取得できるんですか?

927 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 10:49:40 ]
そうできてるから。

928 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 10:56:53 ]
>>927
そうですか
有り難うございます。


929 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 11:00:32 ]
class Foo {}
interface IHoge { void f(); }
class Bar : Foo, IHoge { public void f() {}}

Fooだと思ってるものがBarだったとしたら

930 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 11:03:12 ]
>>924
同じソースならどちらの環境でコンパイルしても同じアセンブリが出来る。
どちらのCLRで動かすかが問題でそこで挙動が異なる場合がある。



931 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 11:04:16 ]
>>930
ありがとうございます
intとか要注意ってことですか?

932 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 11:06:52 ]
>>931
intは64bit環境でも32bitで固定。違いが出るのはIntPtr。

933 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 11:08:55 ]
なるほど、ありがとうございました

934 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 20:21:50 ]
>>932
製品開発統括部ブログだったかな?
WinXP64はintもlongで扱ってると書いていたよ。

935 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 20:29:52 ]
>>934
URLプリーヅ

936 名前:デフォルトの名無しさん [2009/03/27(金) 20:31:00 ]
>>934
System.Int32が64ビットだっていいたいわけ?

937 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 20:31:56 ]
>>935
前に探した時、アドレスが変わる前の記事だったようで見つからなかった

938 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 21:35:09 ]
x64は64bit演算のほうが1バイト命令が長い、
ポインタ64、整数32でやる気満々のCPUだからそれはないと思うな。
03 c8      add   ecx, eax
48 03 c8  add   rcx, rax

VC++も int = long = 32bit, long long = 64bitだし。


939 名前:920 mailto:sage [2009/03/28(土) 03:16:33 ]
>>921
亀レスですみません。
なるほとIXmlSerializableという手がありましたね、すっかり忘れていました。
これを使って解決する機構をGenericsを使って汎用化できるものとして作ってみたいと思います。

940 名前:デフォルトの名無しさん [2009/03/28(土) 04:07:45 ]
Windows.Formsについて質問です。

親子関係になっているコントロールにおいて、
親コントロールで子コントロールのイベントを捕獲する方法を知りたいです。
例えば、子コントロールの中にマウスカーソルがあって、
クリックされると通常は子コントロール側のClickedイベントが発生してしまいますが、
それよりも先に親コントロール側でClickedイベントが発生して欲しいのです。

暫定的な対処として、対象コントロールの子コントロール全てを再帰的に探索して
それらのイベントハンドラに、イベント発生を中継通知するメソッドを登録しています。
が、これでは結局通知のみであってイベント発生自体の順序は変わらないし、
またControlAddedイベントでも、追加されたコントロールに対して更に処理を行っており、
こんな力技な方法、絶対間違っているのでは・・と思っています。



941 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 10:41:13 ]
子.Click += new System.EventHandler(親_Click);
子.Click += new System.EventHandler(子_Click);
てこと?


942 名前:デフォルトの名無しさん [2009/03/28(土) 21:23:54 ]
朝生 「不可解な逮捕 東京地検 どうなる?小沢民主党」 (2009年03月28日)
Part1 -75分-
www.megavideo.com/?v=TBA1379H
Part2 -75分-
www.megavideo.com/?v=JDBPR8XN

943 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 21:35:40 ]
>>940
WPFをつかう

944 名前:デフォルトの名無しさん [2009/03/29(日) 13:08:28 ]
質問です。
これまで以下のように VB6 の ADODB.Recordset Seek メソッドで .mdb 検索を行っていました。

rs.Seek Array(1006, 10), adSeekFirstEQ


C# で再現する場合、
Seek メソッドの第1引数「Array メソッド」に相当するオブジェクトは何なのか教えてください。

945 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:27:57 ]
>>944
データベースへのアクセスモデルからしてまるで変わっちゃってて、
ADOのことはよくわからないからズバリそのものな答えはちょっとわかんない。

Array 相当のものだったら、 new int[] とか new[] { 1006, 10 } とかで作れる。

キーに一致する最初の値をとりたいんだったら、LINQ to SQL 使って
var keys = new[] { 1006, 10 };
var firstEq = table.First(x => keys.Contains(x));
とかでいけると思う。


946 名前:944 [2009/03/29(日) 13:53:30 ]
>>945
ありがとうございます。
やってみましたが仰るとおり

List<object> values = new List<object>();
values.Add(1006);

object[] array = values.ToArray();
rs.Seek(array, SeekEnum.adSeekFirstEQ);


上記のように配列をそのまま渡すことで通りました、ただし値が単一の場合のみ。
下記のようにキー値を複数設定すると「パラメータが間違っています」っておこられる

values.Add(1006);
values.Add(10);


どうしたらいいんだろな_| ̄|○

947 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 13:56:29 ]
new object[] { 1006, 10 }

じゃダメなんけ?

948 名前:944 [2009/03/29(日) 14:07:52 ]
>>947
スマソ。
テーブル名、インデックス名のパラメータを間違えてただけだった。

キー値が複数の場合でもバッチリいけたわ。
ありがとう、無事解決です。

949 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 05:47:23 ]
ところで、
++
++
で、#ちゅう事なん(´・ω・) スカ?

950 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 06:25:37 ]
>>949
アンダース・ヘルスバーグはそう言ってる。



951 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 09:19:47 ]
そんなこじゃれた名前つけるから検索しにくくなるのだ

952 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 14:23:11 ]
.NETよりはまし。.NETの検索し難さといったら…

953 名前:デフォルトの名無しさん [2009/03/30(月) 14:24:12 ]
でもCとかDよりいいよね

954 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 14:29:13 ]
Bも忘れないであげて

955 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 17:53:03 ]
VisualC#2008をインストールして、動作確認の為にWindowsFormsApplication1を
作成したのですが、デバッグ実行すると(0xc0000005)で終了してしまいます。
デバッグなしで実行だと、普通にウインドウが表示されます。

どうやら、プロジェクト名の長さが11文字以上だとこういう現象になるようです。
プロジェクト名が10文字以内というのは、ちょっと不便なのでなんとかしたいの
ですが、対策をご存知の方がいましたら教えてください。

956 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 17:53:44 ]
今の今まで
C,C++,C#相談室
だと思ってた

957 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 18:17:06 ]
昔はスレタイに # の文字入れると#が消えちゃってたから
しつこく入れるようになったんだっけかw

958 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 19:11:59 ]
検索用じゃね?

…と思ったら、1つ目と3つ目がどちらも ASCII のナンバ記号だった。

959 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 20:04:35 ]
いつもは3つ目が全角のナンバー記号だよ。
次スレ立てる人は気をつけて。

960 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:46:02 ]
この Part51 でそろそろ終わりにしようぜ



961 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:52:12 ]
2ヶ月で1スレ消費するようなペースって事は需要はあるのだろう。
Part51にもなって「そろそろ終わりに・・」ってのは今更すぎないかw

962 名前:デフォルトの名無しさん mailto:sage [2009/03/30(月) 22:53:50 ]
>>960
来なけりゃいいんじゃね?

963 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 00:36:10 ]
スレタイに#を3パターンで書くのをこのスレで終わりしないかといってると上の流れを見ると思うのだが
俺がイカれてるのかな。そう解釈する俺が狂ってるだよなやっぱりそうとしか思えないうん

964 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 00:51:31 ]
他のC#スレも数パターン使ってるとこあるし、検索用に残しといていいんじゃね?

965 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 01:44:20 ]
ところでおまいらC#で組んだもの、何に利用してるの? 仕事?


966 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 01:51:26 ]
研究
まあ仕事だけど

967 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 01:52:50 ]
俺は趣味でちまちま作ってる。
自分専用の痒い所に手が届くような小規模アプリが殆ど

968 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 02:27:50 ]
C#で孫の手つくれんの?

969 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 02:30:22 ]
つまんないよ

970 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 02:49:21 ]
つまらないものを面白くするのがプログラミングだろjk



971 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 03:14:15 ]
窓の手ってそういう意味だったのか!素で気付かなかった

972 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 07:47:06 ]
C井でいいんじゃね?

973 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 08:29:31 ]
思いっきり仕事だな。
来月あたりに客先とおしてそのユーザーに公開される(´・ω・`)

974 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 08:57:55 ]
趣味コードは全部C#。
仕事だと、社内ツールの類はC#で書いてる。


975 名前:デフォルトの名無しさん [2009/03/31(火) 10:08:11 ]
質問です。
PropertyGridで入れ子になっていて展開可能な項目を自動で展開したいです。
まずExpandAllGridItemsメソッドを調べてみましたが、これはカテゴリの展開専用で意味がありませんでした。
次に、GridItem.Expandedプロパティを見つけ、おおこれこそ捜し求めていたものと歓喜したのですが・・・
PropertyGridからGridItemの一覧を得る方法が分かりません。
SelectedGridItemがあって、なぜGridItemsが無いのでしょうか。

976 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 10:30:55 ]
SelectedGridItemからParentたどってけば

977 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 11:12:02 ]
Public Type Struct1
  Member1 As String
  Member2 As Byte
  Member3 As Byte
  Member4(20) As String
  Member5(20, 1340) As Byte
End Type

Declare Function ExpFunc1 Lib "Library1.dll" _
  (ByRef a_Struct1 As Struct1, _
  ByVal a_iNumber1 As Long, _
  ByVal a_iNumber2 As Long) As Long

ソースのない「Library1.dll」とそれを利用するための
上のようなVB6のサンプルがあるんですが、
これをC#(2008/.NET3.5)で利用するにはどう書いたら
いいんでしょうか?

よろしくお願いします。

978 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 12:49:26 ]
>>972
++
ナ+
になっちまう

979 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 13:02:09 ]
>>977
C#で参照してみれば?
ラッパクラ出来てインテリセンスきくんじゃないかな?

980 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 13:19:21 ]
>>979
---------------------------
Microsoft Visual C# 2008 Express Edition
---------------------------
'Library1.dll' への参照を追加できませんでした。
ファイルがアクセス可能で、有効なアセンブリまたは
COM コンポーネントであることを確認してください。
---------------------------
OK
---------------------------

COMじゃないとNGっぽいですね。



981 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 13:22:24 ]
DllImportでぐぐればいいんじゃね

982 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 13:23:49 ]
>>980
ごめん、VB6のDLLかと思ってた
VB6はDLLはCOMになるから

そういうことならReflection使ってみては?
色々他にもあると思うけど

983 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 13:25:08 ]
動的に呼び出しさせて何をさせようというんだ俺は・・・
疲れてんだな

984 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 17:19:48 ]
>>977
2次元配列のマーシャリングってできたっけ?>識者

985 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 17:35:29 ]
2次元配列はやったことないけど出来るはずだと思う

986 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 17:43:20 ]
うお、今調べたら出来ないようだった、もうしわけない。
対策はいろいろあるそうだが、ストレートには出来ないそうだ。

987 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 18:18:17 ]
とりあえずVB6の知識をひけらかすか

Public Type Struct1 
  Member1 As String 'BSTR
  Member2 As Byte '1バイト
  Member3 As Byte '1バイト
  Member4(20) As String 'UTF16な文字が20文字
  Member5(20, 1340) As Byte 'Option Base 0なら21×1341バイト
End Type

何の役にたつかはしらん

988 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 18:44:38 ]
>>987
>UTF16な文字が20文字 はこれじゃね?
Member4 As String * 20 

Member4(20) As String はStringの配列21 (Option base によるけど)

989 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 18:52:13 ]
立てれなかったから誰か任せた

C#, C♯, C#相談室 Part52
------------
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C#, C♯, C#相談室 Part51
pc12.2ch.net/test/read.cgi/tech/1233757615/

Visual C# 2008 Express Edition 日本語版
www.microsoft.com/japan/msdn/vstudio/express/vcsharp/

その他テンプレ>>2-5くらい

990 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 18:53:17 ]
「ふらっと」と「VS2008」スレが新スレになってるので更新。
>>3>>5はそのままでおkかな?
-----
関連スレ

ふらっとC#,C♯,C#(初心者用) Part39
pc12.2ch.net/test/read.cgi/tech/1237051173/

Visual Studio 2008 Part 15
pc12.2ch.net/test/read.cgi/tech/1233853864/

WPF(XAML,XBAP,.NET3.5)GUIプログラミング Part3
pc11.2ch.net/test/read.cgi/tech/1231506876/

【VB.NET】LINQ友の会【C#, C♯, C#】
pc11.2ch.net/test/read.cgi/tech/1202568694/

C#,C#の宿題片付けます。
pc11.2ch.net/test/read.cgi/tech/1197620454/



991 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 18:53:59 ]
>>987,988
参考になります。
Option Base は無指定ですので、0ですかね。

UnmanagedType.BStr をヒントにもう少しトライしてみたいと思います。

992 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 19:15:52 ]
VB、C#混合になってしまうが
VB6で>>877の標準モジュールを含むプロジェクトを作って
VB.NETのアップグレードウイザードにかける。

やってみたがTODOが残るな・・・これもで手を入れないといけないようだ。


993 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 19:18:16 ]
VB6もC#も中途半端な知識しか持っていないけどこんな感じではないのか、と質問していい?
unsafe struct Struct1
{
[MarshalAs(UnmanagedType.LPStr)]
string Member1;
byte Member2;
byte Member3;
[MarshalAs(SizeConst = 21)]
string Member4[];
fixed byte Member5[21 * 1340];
};

[DllImport("Library1.dll")]
static extern int ExpFunc1(ref Struct1 a_Struct1, int a_iNumber1, int a_iNumber2);

unsafeが嫌なら
[MarshalAs(UnmanagedType.U1, SizeConst = 21 * 1341)]
byte Member5[,];
としてMember5 = new byte[21, 1341];

994 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 22:01:27 ]
>>988
そうだった
すっかり知識が抜け落ちてて愕然

995 名前:977 mailto:sage [2009/04/01(水) 09:48:39 ]
UnmanagedType.LPStrとか
UnmanagedType.BStrとか
UnmanagedType.ByValArrayとか
いろいろ試しましたが、どうにもうまく行かないので、
もう諦めてVB6でラップDLL作ってそれをC#で参照して
使うことにしました。
VB6のデバッガでもう少し粘るといいのかもしれませんが
これで妥協しました。

いろいろありがとうございました。

996 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 09:55:35 ]
MSDN見たか?まあ解決したならいいか

997 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 10:17:26 ]
C#, C♯, C#相談室 Part52
pc12.2ch.net/test/read.cgi/tech/1238548552/

998 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 10:58:25 ]
>>996
MSDNは 見まくり ですね。。

解決というか 逃げ ですけど、とりあえず
やれることはやれるようになったので。

VB6側の状況がよくわからずに
やみくもにやってもダメですね。
暇ができたら、ダミーの Library1.dll を作って
VB6から呼んでみて、中がどうなってるのか
確認してから再挑戦してみたいと思います。

999 名前:デフォルトの名無しさん [2009/04/01(水) 12:33:10 ]
MSDNよりPInvoke

1000 名前:デフォルトの名無しさん [2009/04/01(水) 13:14:28 ]
1000いただきまーす♪



1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<228KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef