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


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

VB.NET質問スレ (Part18)



1 名前:デフォルトの名無しさん mailto:sage [2006/10/19(木) 18:41:18 ]
[前スレ]VB.NET質問スレ (Part17)
pc8.2ch.net/test/read.cgi/tech/1155292844/

684 名前:666 mailto:sage [2006/12/18(月) 07:07:48 ]
みなさんありがとうございます。

元データの商品マスタと部門マスタはあります。
それぞれ列6要素ぐらいで行100〜1000ぐらいです。

初心者なんで理解しきれてないのですが、マスタの一要素ごとに一次元配列を作ってそれをコレクションとかにいれて使うっていうことでしょうか?

あ、ちなみにVB2005EXPRESS使ってます

685 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 08:14:00 ]
>>666
まず具体的に実現したい処理内容をかかなきゃ誰も答えようがないと思いますが。

こういう人って本当どういう頭してるんだろう。
他人はアンタの考えてることが言葉にしなくてもわかるエスパーか何かだと思ってんの?
なんにしろ、説明能力に問題がある時点でプログラマには向いてないといわざるを得ない。

686 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 16:37:03 ]
>>539,634,609,680,685 
これ以上、辿るのめんどくさいからやめた。

この人って本当どういう生活してるんだろ。
仕事では、対人関係の問題で使い物にならないんだろうな。
ネットで延々と煽って憂さ晴らし。ご愁傷様です。

687 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 22:10:41 ]
フォームのサイズを変えたら一緒に
ボタンやラベルを大きくする方法ないですか??

688 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 22:11:44 ]
Anchor
Dock

689 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 22:43:00 ]
>>688
もうちょい詳しくおしえてください・・・

690 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 23:15:49 ]
Anchor 【あんかー】
Dock【どっく】

691 名前:デフォルトの名無しさん mailto:sage [2006/12/18(月) 23:25:50 ]
いじめられた・・・

692 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 00:09:15 ]
アンカー 船舶が使用する錨のこと
ドック 船舶の製造、修理などに際して用いられる設備



693 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 00:11:55 ]
碇、後戻りはできんぞ
さすがドックだ、なんともないぜ

694 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 00:38:44 ]
これほど「ぐぐれかす」が似合う男もそういないぞ。がんばれ。

695 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 11:24:20 ]
VBのランタイム関数って.NETになってからも追加されているんですかね?

696 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 17:54:34 ]
Microsoft.VisualBasic

697 名前:デフォルトの名無しさん mailto:sage [2006/12/19(火) 19:42:06 ]
Windows2000(SP4)でVB2005を動かした場合なんですが
フォームにListViewを置いて、そのListViewにToolTipを設定した時
ListViewの空白部分をマウスでポイントすると普通にToolTipが表示されるのですが、
行(ListViewItem)が表示されている部分をポイントすると
ToolTipが一瞬だけ表示されて消えたり、ちらちらと点滅したり
異常な動きをします。

原因、対処法をご存じでしたらお教え下さい。

698 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 11:57:24 ]
VB6 から VB2005 に移行して勉強した人が、

以前からの会社の都合でどうしても VB.NET 2003 とかで開発する

必要がある、というような場合、言語上で新たに覚えないといけないような点

はありますでしょうか?


Version としてはバックすることになりますが、VB2005 の方が楽になっている

ので VB.NET 2003 とかに戻ると オブジェクト指向プログラミング的に

厳密にやらないといけない部分が出てくると思うのですが、その辺で

やっかいな部分から列挙するとどんな感じになるでしょう、、

このあたりを心配していましたが、すみませんが、よろしければこの件で

ご指導くださればありがたく、よろしくお願いします


それとも、VB.NET 2003 で開発していた案件はすべて 

VB2005 に移行していくと考えてよいでしょうか

この辺もよろしければ教えてくださると助かります

699 名前:デフォルトの名無しさん [2006/12/20(水) 11:59:19 ]
上げるの忘れました、スマソ

700 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 14:34:40 ]
言語よりむしろNET Framework 2.0と1.xの違いの方が大きいと思われ。


701 名前:デフォルトの名無しさん mailto:sage [2006/12/20(水) 22:14:33 ]
一番大きいのは Using が無い事か?
ジェネリクスの方はどうも VB ではあまり聞こえてこないんだが導入に積極的でないのかね

702 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 08:19:32 ]
このスレは既にPart17ですが、いったいみなさんはVB.NETで何を開発してるのでしょうか??
やっぱ、ほとんど、サーバーサイドのWebアプリケーションでしょうか??
クライアントサイドの.NETアプリをあまり見かけないので質問しました。




703 名前:デフォルトの名無しさん [2006/12/21(木) 08:33:23 ]
質問があります。

エディタにxxxxx.ToStringと入力した時にToString()って
自動的にカッコが付く様にはできないのでしょうか?

704 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:27:01 ]
VS、というかVBのエディタの設定項目なんて数える程しかないのにな。
仮に500以上の設定項目が幾重かの階層になっている、とかなら
>>703みたいな質問もさもありなんと思うんだけど。

まあ703みたいな人がPGに基本的に向かない性格なのは疑いようがない

705 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:35:11 ]
>>704
真性のキチガイやろう。

湧いて来るんじゃねぇよ。

706 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:38:33 ]
>>704 氏ねよクズ 死ねよ

707 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:39:46 ]
(・∀・)ジサクジエンデシタ

708 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:40:13 ]
お前ら耐性なさ杉だ

709 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:42:44 ]
「教えて君」「教える君」というのは、
ネット上に存在する2種類の人種の人たちを示す揶揄された敬称のことであるが
その影には「教えない君」という人種が多数いるの事にはあまり注目されていない。

しかし、実はその「教えない君」という人種が一番厄介かつ迷惑な存在だったりするのである。
そもそも荒れる原因というものは「教えない君」の、無秩序かつ、無神経なレスにある部分が
大多数なのだが、彼らの多くは、そういった感覚はどうやら持ち合わせていないようである。

第三者がそうした場面を見た場合に、誰に一番の非があるというのは
「教えない君」にあるというのが客観的事実であるのは明らかなのであるが、
彼らは認めようとしない。

表面上は、「教えない君」はネット上のルールや倫理や秩序などを叫ぶのであるが
どうやら真相は、現実社会において蔑まれる存在である「教えない君」の
鬱憤晴らしのようである。

上記でそういった悲哀のレスを付けた人たちは、勇気を持って自らの弱さと過ちを認め
反省しなければならない。
それがキミたちニートの人間的に成長できる少ないチャンスなのである

710 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:59:11 ]
長文カキコorコピペする「粘着くん」もいるみたいですよ


711 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 12:59:22 ]
500以上の設定項目が幾重かの階層になっているなら質問OKだってw

ハハハハハ
死ねよクズ

712 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 13:18:57 ]
500もの設定の中から探すような
規模の事しか質問してはいけないって オイオイ



713 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 18:42:59 ]
ComオブジェクトのShockwave Flash Objectをコントロールとして利用したいのですが、

依存する COM 参照 "stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" を解決できませんでした。
タイプ ライブラリ "AxShockwaveFlashObjects" のラッパー アセンブリを作成できませんでした。種類 'Microsoft.Build.Tasks.ComReferenceResolutionException' の例外がスローされました。

などのエラーが発生して、利用することが出来ません。前までは出来ていたのですが、、、

714 名前:酔いちくれ ◆J0rwikii8c mailto:sage [2006/12/21(木) 19:25:04 ]
>>713
外してたら、スマソ。


2003で使ってたのが、2005で使えなくなったとか。

715 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 19:41:32 ]
いえ、2005環境で使うことが出来ていました。今試したところ、Delphi6でも貼り付けることができました。
・・・何が原因なんでしょう。

716 名前:酔いちくれ ◆J0rwikii8c mailto:sage [2006/12/21(木) 19:49:26 ]
内部でラッパーのAxShockwaveFlashObjectsにアクセスできてない
みたいだから、AxInterop.ShockwaveFlashObjects.dllが悪いのは
確かと思う。

フレームワークが同居してるなら、そのDLLを探してみるのも
いいかも。

ちょっとDelphiは知識ないから、スマソ。

717 名前:713 mailto:sage [2006/12/21(木) 21:03:13 ]
原因が分かりました。
参照の追加でCOMタブのOLE Automationを参照させないと実行できないようです。
お騒がせしてすいませんでした。

718 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 22:28:12 ]
ttp://www.microsoft.com/japan/learning/mcp/developers/default.mspx
や ら な い か


719 名前:デフォルトの名無しさん [2006/12/23(土) 11:47:03 ]
データグリッドの最初の列を足したいんだけど、For eachで書けないかな?
下ので一応いけるんですが。

Dim sum As Single
For i = 0 To DGV.RowCount - 1
sum += DGV.Item(0, i).Value
Next
MessageBox.Show(sum)

720 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 11:50:08 ]
変数名からして DataGridView のようだが。

721 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 12:06:07 ]
Option Strict Offなソースを見ると何か嫌な気分になる

722 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 13:09:52 ]
>>720
そうです。



723 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 13:29:51 ]
>Dim sum As Single
なんでSingle…


724 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 13:39:43 ]
>719

つか集計したいのなら、DataColumn.Expressionでsumするのが
早いと思うが…。

つttp://msdn.microsoft.com/library/ja/cpref/html/frlrfSystemDataDataColumnClassExpressionTopic.asp


725 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 22:53:30 ]
>723
少数があるので。

>724
ありがとうございます。参考にさせてもらいます。

726 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 05:01:00 ]
すみません、オブジェクト志向プログラミングについて日が浅いもので
よくわからないのですが、、

たとえば、あるクラスから生成されたオブジェクトのコレクションが定義されているとして、
そのADDメソッドには、その元のクラスから派生されたオブジェクトを指定してコレクションに
追加していくことはできるでしょうか

たとえば、TreeViewコントロールにおいて、あるノードに子ノードを追加するという場合、
その子ノードは(ノードのコレクションである以上)TreeNodeクラス型オブジェクトでなければ
ADDできないと思っていましたが、実際には、「TreeNodeクラスの派生クラスのオブジェクト」
でもADDできているようでした。

これは通常の コレクションにおけるADDメソッド のデフォルトの性質でしょうか?

ヘルプの説明では普通に TreeNodeクラス型のオブジェクトをADDするようになっています
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ja/CPref17/html/M_System_Windows_Forms_TreeNodeCollection_Add_1_526d62f3.htm

初心者ですみませんが、よろしくお願いします

727 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 09:56:13 ]
ArrayList というコレクションが標準ライブラリにある。
これの Add メソッドは引数に Object 型を要求する。

さて、Object 型しか入れられないのならこのコレクションの存在意義ってなんだ?

728 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 11:01:47 ]
>>727
どうもです、ありがとうございます

要するに ADDメソッド の基本機能が、そもそもどんなオブジェクトでもADDできる
ようになっている、ということなのですね

ArrayList.Add メソッド を見ると、はじめから ADD(”・・・”) で String型 の値を
渡してもそのままADDされるということは、ADDの引数は始めからオーバーロード
で定義されているということもあるのでしょうか、ただ

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ja/cpref2/html/M_System_Collections_ArrayList_Add_1_b4c5a2da.htm

には、オーバーロードの複数引数定義は書かれていませんでした


それとも、Object型として引き受けるということ自体が、String型の値でも元々引き受ける
ようにできているということなのでしょうか、つまりオブジェクト指向での必要条件として
元々 ADDメソッド はこういう構造になっていると・・・)、このどちらなのでしょう?

729 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 11:06:30 ]
派生クラスのインスタンスは基底クラスのインスタンスとして振る舞う事が出来る。
それだけ。

ついでに言うと全てのクラス・構造体は Object クラスから派生する。
String クラスのインスタンスは基底クラスである Object クラスのインスタンスとして振る舞う事が出来る。

730 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 11:14:03 ]
例として
 TreeNodeCollection.Add メソッド
の説明ですと、
 ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ja/CPref17/html/O_T_System_Windows_Forms_TreeNodeCollection_Add.htm
のように、
 String型の値のADD、TreeNode型のオブジェクトのADD
も共にオーバーロードの定義が明示されていましたので、型の拡張は明示されて
初めて利用可能になるものと考えたのでした

731 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 11:16:40 ]
>>729
あ、すみません、かぶりました

>派生クラスのインスタンスは基底クラスのインスタンスとして振る舞う事が出来る。

つまりオブジェクト指向の標準として、そういうことななのだと、
わかりました。

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



732 名前:デフォルトの名無しさん mailto:sage [2006/12/24(日) 11:20:27 ]
>>730の 「TreeNodeCollection.Add メソッド」 のような場合は
他の引数のオーバーロードも定義したので、基本的な標準の
 String型の値のADD、TreeNode型のオブジェクトのADD
もついでに記載した、ということなのでしょうね。

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



733 名前:デフォルトの名無しさん mailto:sage [2006/12/25(月) 18:44:38 ]
いやTreeNode型のオーバーロードが標準だろ
あとはそれに皮をかぶせただけのオマケ

734 名前:デフォルトの名無しさん mailto:sage [2006/12/25(月) 20:27:07 ]
Windows Media Playerを制御することってできますか?
ファイルを指定して再生、停止、開始/終了時間の範囲指定など。

735 名前:デフォルトの名無しさん mailto:sage [2006/12/25(月) 21:51:19 ]
できます

736 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 02:39:28 ]
こんばんは

例外を以下のように処理しようとしているのですが、
メッセージボックスが表示されずに、通常のエラーメッセージが表示されます
原因は何でしょうか?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

 Dim A As String = "aaa"
 Dim B As Integer

 Try
   B = CType(A, Integer)
 Catch ex As Exception
   MessageBox.Show("Error")
 End Try
End Sub

737 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 06:00:31 ]
ネタ?
ネタだよな?


738 名前:デフォルトの名無しさん [2006/12/26(火) 06:48:40 ]
質問です。

1を2のように記述したら警告になってしまうのですけど、
この警告を出ないようにするにはどうすればいいですか?
おしえてちょ。

1 Me.DialogResult = Windows.Forms.DialogResult.OK
2 Me.DialogResult = DialogResult.OK

739 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 08:16:06 ]
理由がわかるようになるまで学習を進める、が正解だと思うよ。

740 名前:734 mailto:sage [2006/12/26(火) 08:27:26 ]
>>735
どのクラスライブラリを使えばいいんでしょうか?
よかったら教えてちょ

741 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 10:32:23 ]
>>736

  ∧ ∧
 (*‘ω‘ *)  ちんぽっぽ
  (   )
   v v
        ぼいんっ
    川
  ( (  ) )


>>740
wmp.dllを参照に追加



742 名前:デフォルトの名無しさん [2006/12/26(火) 14:05:23 ]
皆様お疲れ様です、またよろしくお願いします。
(タイトル)  デザイン環境による作成時にコントロールを初期化する方法について
(開発環境) VS2005Pro
(実現したい内容)
 コンポーネント・クラスの作成の仕方として、そのコンポーネントを アプリケーションの
 フォーム・デザイン時に単に貼り付けた時点でのみ動作する初期化どのように実装するか
(試行)
  <System.Diagnostics.DebuggerNonUserCode()> _
  Public Sub New()
MyBase.New()
'この呼び出しは、コンポーネント デザイナで必要です。
InitializeComponent()
  End Sub
  に追加しますと、実行時にも実行されてしまう
(その他に)
  ComponentDesigner.InitializeNewComponent メソッド
    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.ja/dv_fxdeveloping/html/914eaa03-092f-4556-9160-b8a2a40641d9.htm
    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.ja/cpref3/html/M_System_ComponentModel_Design_ComponentDesigner_InitializeNewComponent_1_d8aa9975.htm
 を用いる説明があり、Public Overrides Sub InitializeNewComponent(ByVal defaultValues As IDictionary)〜End Sub
 を *..Designer.vb に追加してみるものの継承元のクラスには同メソッドはなくエラーとなり、
 Overrides をはずしてエラーを回避し実装したが (ComponentDesignerクラスは特に利用して
 いないためか)その中にに書いたコードは実行されず
(・・・) フォーム・デザイン時に単に貼り付けた時点でのみ動作する初期化はどのようにして実装するべきか、よろしくご指導ください、お願い致します

 





743 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 14:14:29 ]
ネイティブジャパニーズとはとても思えない日本語だな
if DesignMode

744 名前:734 mailto:sage [2006/12/26(火) 14:23:53 ]
>>741
できません。。。
ぐぐると www.users.gr.jp/blogs/hidori/articles/5302.aspx
ツールボックスにWindows Media Player コンポーネントが
出てくるらしいのですが、出ません。

当方、
・WinXPSP2Pro
・Windows Media Player10
・VB2005Express
なんですが・・・orz

ちなみに上記からダウンロードしたソースをC#2005Expressで開くと実行できましたが、
やはりツールボックスにはWindows Media Player コンポーネントがありません・・・

もしかしてExpressEditionではダメなんですかね?

745 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 14:30:32 ]
>>744
homepage1.nifty.com/rucio/main/kiso/Kiso14AddControl.htm

746 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 14:51:59 ]
>>743
日本語下手ですんません、どう書くと整理できるか編集中にてにをはが狂いました。
実は Windowsアプリケーションに貼り付けるコントロールだったのですが、

>if DesignMode

これを書いてみたところデザイン時も、実行時も常に False のようで、どちらでも
実行されませんでした(継承元のクラスは TreeView)。

ヘルプによると、DesignMode は 
 名前空間: System.Web.UI
 アセンブリ: System.Web (system.web.dll 内)
とあったので Web部品用のものなのでしょうか?

747 名前:734 mailto:sage [2006/12/26(火) 14:52:47 ]
>>745
ありがとうございました。
できました(´∀`)

748 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 14:54:46 ]
>>746ですが、実際には System.Web.UI を Imports していなくても
使えていたので、「Web部品用」でなくても持ってるプロパティですよね
うーん、どうしてだろ。。。

749 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 15:21:12 ]
>>748
System.ComponentModel.Component.Designmodeだよ。
で、C#の記事だけどこれかな?
blogs.wankuma.com/mnow/archive/2006/11/08/44120.aspx

750 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 17:02:24 ]
>>749
どうもです、そうでした、System.ComponentModel.Component にも
DesignMode はありました。

Parent の DesignMode はその記事の通りやはり Protected だった
ようでエラーとなりました。

いまいろいろ調べてみましたがまだ解決していませんが、
さらに調べてみます。

751 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 20:25:20 ]
ttp://www.be-interactive.org/index.php?itemid=118&catid=10
これをVB2005で行いたいのですが、どのようにすれば良いのか分かりません。

Const WM_COPYDATA As Integer = &H4A
Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Integer, ByVal MSG As Integer, ByVal wParam As Integer, ByVal lParam As COPYDATASTRUCT) As Integer

Sub main()
Dim sendMes As New COPYDATASTRUCT
sendMes.lpData = _
New System.Text.StringBuilder("TestAPP" + Chr(0).ToString + "Music" + Chr(0).ToString + "1" + Chr(0).ToString + "{0} - {1}" + Chr(0).ToString + "TEST" + Chr(0).ToString + "TEST")
sendMes.cbData = sendMes.lpData.Length + 2
SendMessage(132030, WM_COPYDATA, Nothing, sendMes)
End Sub

Public Structure COPYDATASTRUCT
Const dwData As Integer = 1351
Public cbData As Integer
Public lpData As System.Text.StringBuilder
End Structure

このようにしたところ、SendMessageのところでTypeLoadExceptionを吐いてしまいます。

よろしくお願いします。

752 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 20:48:53 ]
・文字コードはそれで大丈夫?
 ANSIだと
  sendMes.cbData = sendMes.lpData.Length + 1
 だと思うけど。
 SendMessageWにしてCharSet = CharSet.Unicodeにし、
 その場合
  sendMes.cbData = (sendMes.lpData.Length + 1 )*2

・シグネチャ
  ByVal lParam As COPYDATASTRUCT → ByRef lParam As COPYDATASTRUCT





753 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 20:55:40 ]
回答ありがとうございます。・・・しかし無理でした。COPYDATASTRUCTのlpDataが悪さしているようですが、、、

Const WM_COPYDATA As Integer = &H4A
Declare Ansi Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Declare Unicode Function SendMessage Lib "user32.dll" Alias "SendMessageW" (ByVal hWnd As Integer, ByVal MSG As Integer, ByVal wParam As Integer, ByRef lParam As COPYDATASTRUCT) As Integer

Sub main()
Dim sendMes As New COPYDATASTRUCT
sendMes.lpData = _
New System.Text.StringBuilder("TestAPP" + ChrW(0).ToString + "Music" + ChrW(0).ToString + "1" + ChrW(0).ToString + "{0} - {1}" + ChrW(0).ToString + "TEST" + ChrW(0).ToString + "TEST")
sendMes.cbData = (sendMes.lpData.Length + 1) * 2
SendMessage(FindWindow("MsnMsgrUIManager", Nothing), WM_COPYDATA, Nothing, sendMes)
End Sub

Public Structure COPYDATASTRUCT
Const dwData As Integer = 1351
Public cbData As Integer
Public lpData As System.Text.StringBuilder
End Structure

754 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 21:04:56 ]
もうぶっちゃけちゃうと、

COPYDATASTRUCT.lpData をIntPtrにして文字列をMarshal.AllocHGlobal, Marshal.StringToHGlobalAutoで割り当てる
(あとでFreeHGlobal)
んで
sendMes.cbData = (sendMes.lpData.Length + 1) * 2

COPYDATASTRUCTそのものもMarshal.StructureToPtr, Marshal.StructureToPtrでメモリに割り当てて
(あとでFreeHGlobal)

そいで
SendMessageの第4引数をByVal IntPtrにする。

755 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 21:17:52 ]
もうこれはあきらめるしか無いのですかね、、、

Const WM_COPYDATA As Integer = &H4A
Declare Ansi Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Declare Unicode Function SendMessage Lib "user32.dll" Alias "SendMessageW" (ByVal hWnd As Integer, ByVal MSG As Integer, ByVal wParam As Integer, ByRef lParam As System.IntPtr) As Integer

Sub main()
Dim sendMes As New COPYDATASTRUCT
Dim str As String = "TestAPP" + ChrW(0).ToString + "Music" + ChrW(0).ToString + "1" + ChrW(0).ToString + "{0} - {1}" + ChrW(0).ToString + "TEST" + ChrW(0).ToString + "TEST"
Dim ptr As IntPtr
sendMes.lpData = System.Runtime.InteropServices.Marshal.AllocHGlobal(System.Runtime.InteropServices.Marshal.StringToHGlobalAuto(str))
sendMes.cbData = (str.Length + 1) * 2
System.Runtime.InteropServices.Marshal.StructureToPtr(sendMes, ptr, True)
SendMessage(FindWindow("MsnMsgrUIManager", Nothing), WM_COPYDATA, Nothing, ptr)
System.Runtime.InteropServices.Marshal.FreeHGlobal(sendMes.lpData)
System.Runtime.InteropServices.Marshal.FreeHGlobal(ptr)
End Sub

Public Structure COPYDATASTRUCT
Const dwData As Integer = 1351
Public cbData As Integer
Public lpData As System.IntPtr
End Structure

756 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 21:20:51 ]
ミスしました。
Dim ptr As IntPtr = System.Runtime.InteropServices.Marshal.AllocHGlobal(System.Runtime.InteropServices.Marshal.SizeOf(sendMes))
これだとうまくいくっぽい、、、

757 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 21:25:48 ]
やっぱりダメでしたorz

758 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 21:31:25 ]
一度メッセージ受けるだけのアプリ作ってみれば?
とりあえずメッセージとその内容が正しく届いてるか確かめるためにさ。

文字列をマーシャリングするときに\0で終了と認識されてるのかも。
byte配列とかにする必要があるかもね〜


759 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 02:51:36 ]
こいつの(Cで書かれた)ソースにもコメントに書かれているんだが。
途中の区切文字は"\0"であって、
chr(0)でもchrW(0)でもvbNullCharでもvbNullStringでもString.EmptyでもNothingでもない。

Structure COPYDATASTRUCT
Dim dwData As Int32
Dim cbData As Int32
Dim lpData As IntPtr
End Structure
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal data As IntPtr) As IntPtr
Private Declare Ansi Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
Private Sub SongNameSendToMessenger()
Dim dtstrct As New COPYDATASTRUCT
Dim buf As String = Nothing
Const WM_COPYDATA As Integer = &H4A
buf = "OrgApp\0Music\01\0{0} - {1}\0曲名\0アーティスト名\0アルバム(シングル)名" & vbNullChar
dtstrct.dwData = 1351
dtstrct.cbData = buf.Length * 2
dtstrct.lpData = Marshal.StringToHGlobalUni(buf)
Dim MyPointer As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(dtstrct))
Marshal.StructureToPtr(dtstrct, MyPointer, False)
Dim hWnd As IntPtr = FindWindow("MsnMsgrUIManager", Nothing)
Dim ret As IntPtr = SendMessage(hWnd, WM_COPYDATA, 0, MyPointer)
Marshal.FreeHGlobal(MyPointer)
End Sub

760 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 09:04:32 ]
ネタだろといわんばかりだ。

761 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 18:47:00 ]
>>755
たぶんこれでいけるんじゃないかな?
なんちゃらメッセンジャーなんてクソ鬱陶しいソフトは使ってないので試してないが、
とりあえずメッセージの送信はこれでできているはずと思う。
見ればわかると思うけど、Formのコマンドボタンのクリックで送信するようになってる。
あと、いろんなところに属性がくっつけてあるけど、あまり考えずテキトーに使っているので
たぶん冗長なものがあると思う。
  Const WM_COPYDATA As Integer = &H4A

  <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
  Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As IntPtr) As IntPtr
  End Function

  <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
  Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
  End Function

  <DllImport("user32.dll", CharSet:=CharSet.Unicode)> _
  Private Shared Function SendMessage(ByVal hWnd As IntPtr, _
                  ByVal MSG As Integer, _
                  ByVal wParam As Integer, _
                  ByRef lParam As COPYDATASTRUCT) As IntPtr
  End Function

  <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode, pack:=4)> _
  Public Structure COPYDATASTRUCT
    Public dwData As Integer
    Public cbData As Integer

    <MarshalAs(UnmanagedType.LPWStr)> _
    Public lpData As String
  End Structure

762 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 18:47:39 ]
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim sendMes As COPYDATASTRUCT
    Dim strArray As String() = {"TestAPP", "Music", "1", "{0} - {1}"}
    Const separator As String = "\0"
    Dim str As String = String.Join(separator, strArray)
    Dim byteCount As Integer = Encoding.Unicode.GetByteCount(str)

    With sendMes
      .dwData = 1351
      .lpData = str
      .cbData = byteCount + 2
    End With

    'メモ張のウィンドウハンドルを取得してみる。
    Dim hWnd As IntPtr = FindWindow("Notepad", IntPtr.Zero)
    Console.WriteLine("hWnd = " & hWnd.ToInt32.ToString("X8"))
    Dim ret As IntPtr = SendMessage(hWnd, WM_COPYDATA, 0, sendMes)
    Console.WriteLine("SendMessage = " & ret.ToInt32.ToString("X8"))
    '自分にも同じメッセージを送ってみる。
    ret = SendMessage(Me.Handle, WM_COPYDATA, 0, sendMes)
  End Sub

  Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    MyBase.WndProc(m)
    Select Case m.Msg
      Case WM_COPYDATA
        Dim dat As COPYDATASTRUCT _
          = CType(Marshal.PtrToStructure(m.LParam, GetType(COPYDATASTRUCT)), COPYDATASTRUCT)
        Console.WriteLine("Received String = " & dat.lpData)
    End Select
  End Sub



763 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 19:28:34 ]
>>759,>>761
ありがとうございます、出来ました。

764 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 20:57:03 ]
Visual Basic 2005 Express Editionで手軽に使用できるフリーのグラフを描画できるライブラリってありませんかー

765 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 23:29:30 ]
VB2005には、ExcelのScreenUpdateのように描画を後でまとめて処理する
ような関数は用意されているんでしょうか?

766 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 19:39:37 ]
VB2005で作成したDLLファイルなどのクラスライブラリを使用する
Windowsアプリケーションを構成すると、それらのDLLを含む形で
Releaseフォルダーが出来上がりますが、それらのDLLファイルを
初めから実行ファイル.exeに入れ込んでしまうようなビルドって
できましたっけ?

767 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 21:52:06 ]
ソリューションのプロパティのコンパイルのところの
ビルド出力パスの設定をすればOK

768 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 21:52:43 ]
じゃないな

769 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 21:54:26 ]
出力ディレクトリにコピーというところを する に設定
すればってことか?

770 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 22:25:51 ]
フォルダごと自己解凍形式のEXEにする

771 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 22:37:03 ]
>>766
むりぽ

772 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 23:24:37 ]
>>766
フルマネージドなアセンブリなら、ildasm/ilamsを使って統合できるよ。
バッチを組めば全自動でできる。



773 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 00:53:21 ]
ILMerge


774 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 01:00:58 ]
>>773
へーへーへー

775 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 13:44:25 ]
こんにちは
VB2005使ってPACMAN作りたいんですけど
どんな風に作ればいいですか?
正方形のPicBOXを並べて中の画像を入れ替えたりするのか
それともPicBOXを移動させるべきなんでしょうか・・
移動させるとなると、どこからどこまで移動できるのかなどは
どのように定義してやれば良いんでしょうか;;

アドバイスお願いします

776 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 13:51:19 ]
作りたいように作れば?
どんな風って、中華風のコピーでしょ?


777 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 14:09:14 ]
>>767-774
ご教授助かります、
>>772 ilasm
>>773 ILMerge
というのがあったんですね!

現在まだ明確に理解できていませんが、MSIL や JIT 等についても
調べつつありました

>>772 ilasm
で生成される実行可能ファイル.exe は、MSILファイルをポータブル実行可能
ファイル.exe にするためのアセンブラーで、統合する機能はあるかどうか
(参照) msdn2.microsoft.com/ja-jp/library/496e4ekx(VS.80).aspx
・・・単一のファイルのアセンブル用(つまり通常のVS環境で生成される
  exeと同等のアセンブル用)なのかもしれないかとも思われました

>>773 ILMerge
こちらですとDLLファイル等をexeファイルに統合するようでした(現状実施未確認)

これらと、JITコンパイルとの関係がまだよく理解できていませんでしたが、次のように
考えておいて良いでしょうか?

 1.通常VSによるコンパイル=ilasm → ソースからMSILを経て単一の exe や dll へ
 2.ILMerge → それら exe や dll を一つにまとめるまでを行い、JITコンパイル相当の
           アセンブルは行なわれない
 3.JITコンパイル → 1や2で作成されるファイルはすべて実行時に初めてマシン固有の
               機械語に落ちる

778 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 14:16:41 ]
>>777
これに関連してですが、一旦 ILMerge で作成された統合実行ファイル exe は、
もはや ildasm で 逆コンパイルすることはできないのでしょうか?

もし逆コンパイルできないようになってしまう場合は、リバースエンジニアリング不能に
なってソースのセニュリティ上は都合がいいかもしれませんが・・・

779 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 14:21:41 ]
なんかかわいいな、せにゅりてぃ

780 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 15:10:18 ]
単にILのコードを繋げるだけじゃないの

781 名前:777 mailto:sage [2006/12/29(金) 17:53:30 ]
ILMerge を使って試しに1本のファイルを作ってみたところ、確かにそれ1本だけで動作しました。

>>780
どうも’MSIL へのコンパイル ’
msdn2.microsoft.com/ja-jp/library/c5tkafs1(VS.80).aspx
によりますと、

-------
”MSIL とメタデータは、実行可能ファイルのファイル形式として使用されてきた従来の Microsoft PE と
COFF (Common Object File Format) に基づき、それらを拡張したポータブル実行可能 (PE) ファイル
に格納されます。

MSIL、ネイティブ コード、およびメタデータを保存できるこのファイル形式を使用すると、オペレーティング
    ~~~~~~~~~~~~~~~~~~
システムが共通言語ランタイムのイメージを認識できるようになります。MSIL と共にメタデータが
このファイルに格納されるため、コードは自己記述型になります”
-------

とあり、どうも VS開発環境 および ilasm が出力する exe ファイルそのものが、
 「ポータブル実行可能 (PE) ファイル」
であり、ということはその中にすでに ネイティブ コード が埋め込まれているかのような説明に読め
ましたが、現実にPE形式のファイルにはすでに JITコンパイルされた後にできるはずの ネイティブ コード 
が含まれてしまっているのでしょうか?

782 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 18:06:32 ]
C++/CLIとかで意図的にネイティブコードを混ぜることができることを指してるのかな



783 名前:デフォルトの名無しさん mailto:sage [2006/12/29(金) 19:29:56 ]
>>781
あんまり俺解釈するな。


784 名前:777 mailto:sage [2006/12/29(金) 19:44:57 ]
>>782
あ、なるほど、そういうことか、であればJITコンパイルで出来上がるネイティブ・コードが
含まれていることはなさそうですよね

ということは、結局MSILレベルで複数のexeやdllがうまく結合されて1本にまとまっている
ということになり、逆にいえばコードの構造は ildasm (逆アセンブル)可能となって
>>778のリバース読み込みも不可能ではない、ということになるのかも

結局、「MSIL → *.exe」 を行なっている ilasm は 「実際にはアセンブルというほど
”コード変換” は行なっていない」 ということなのか・・・







[ 続きを読む ] / [ 携帯版 ]

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

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