1 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 10:00:19 ] 前スレ VB.NET質問スレ(Part29) pc12.2ch.net/test/read.cgi/tech/1235206416/l50 テンプレは>>2 〜
237 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 16:00:18 ] DB的な使い方をしない前提なら、 スポットで1日分だけ読み込もうとせずに、 1年分くらい全部読み込んでおけってことになるね。
238 名前:デフォルトの名無しさん [2009/06/26(金) 18:18:29 ] VB.NETでスレッドを扱いたいんです。 同時に20個ほどスレッドを起動させ終了を待ちたいのですが、 どうすればいいのでしょうか? .joinでは無理ですよね? よろしくお願いします。
239 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 18:21:09 ] 別にJoinでも問題ないと思うが
240 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 18:49:10 ] そんなにスレッド起動させてどうすんの? SNS巡回ツールでも作んの?
241 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 23:46:59 ] 大量のラベルコントロールを書き換えがしたくて label1 label2 label3...のような感じで連番にして繰り返し処理で 一気に書き換えようと思うのですが思うようにできません target = Cobj("label" & i) のような感じにしたのですが エラーが出てとまってしまいます どうしたらよいのでしょうか?
242 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 00:02:44 ] >>241 label1 label2 label3...をListに入れる
243 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 00:03:16 ] テンプレに入れたいぐらい良く出るな、この類の。 配列に入れとけ
244 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 00:13:42 ] Controls()からLabelをさがせばいいんじゃない For Each child As Control In Me.Controls If child.Text Like "Label*" Then child.Text = child.Text & "でんがな" End If Next
245 名前:デフォルトの名無しさん [2009/06/27(土) 00:34:12 ] 正直、こんな命令があったんだとか こんな使い方があったんだとか 他人のプログラムやサイトを見て知ることが多く それを踏まえてみると自分の書いたコードがとても無駄だったみたいな経験があるんですが みなさんはどうやって、こんな命令があるこんな使い方があるみたいなものを学んでるんですか?
246 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 00:36:46 ] MSDNのサンプルを読破しようと思ったこともありました 挫折しました というわけで他人のプログラムやサイトw
247 名前:238 mailto:sage [2009/06/27(土) 01:31:43 ] >>238 です スレッドが終わるタイミングはまちまちです。 終わったスレッドから終わったあとの処理をしていきたいのです。 .joinだと制御が戻ってこないので困っています。
248 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 01:33:33 ] コンストラクタ内のstatic変数ってそのクラスのオブジェクトすべてで共通じゃないの? オブジェクトに通し番号をつけようと思って以下のように書いたんだが、毎回0になるのだが・・・ Public Class Form1 Private Class Foo Public Sub New() Static Sequence As Integer = 0 Sequence += 1 (毎回0に初期化されてこの時点で1になる
249 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 02:16:37 ] >>248 Static (Visual Basic) ttp://msdn.microsoft.com/ja-jp/library/z2cty7t8(VS.80).aspx >プロシージャが Shared でなければ、その Static 変数を含むローカル変数はインスタンス変数になります。 >そのインスタンス内の変数は、別のインスタンス内の同じ名前を持つ変数とは独立したものです。 各インスタンスで共有したかったらShared使ってこんな感じ Private Class Foo Private Shared Sequence As Integer = 0 Public Sub New() Sequence += 1 Console.WriteLine(Sequence) End Sub End Class
250 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 02:28:03 ] >>249 thnx staticなのにインスタンス別とは・・・
251 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 03:39:00 ] >>247 やっぱ、スレッドが終わるとき自分で終了通知する、とかじゃないかね Dim waitHandles(20) As AutoResetEvent Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load For i As Integer = 0 To waitHandles.Length - 1 waitHandles(i) = New AutoResetEvent(False) Dim workThread As Thread = New Thread(AddressOf worker) workThread.Start(i) Next Dim manageThread As Thread = New Thread(AddressOf manager) manageThread.Start() End Sub Private Sub worker(ByVal obj As Object) Dim i As Integer = CInt(obj) Thread.Sleep(i * 100) '適当に仕事をする waitHandles(i).Set() 'スレッドが終わるときに終了通知 End Sub Private Sub manager() Debug.Print("--------------") For count As Integer = 0 To waitHandles.Length - 1 Dim i As Integer = WaitHandle.WaitAny(waitHandles) '終了通知を待つ Debug.Print("worker {0} done", i) Next Debug.Print("ALL done") End Sub
252 名前:225 [2009/06/27(土) 08:11:33 ] 皆さん、教えていただきありがとうございました。 DBの設計を見直した方が良かったのですが、時間的な関係で今回はこのまま行く 事になりました。 結局プログラムでレコード1件ずつ読み込んで、指定日付の月、日に 対応するフィールドそれぞれのデータがtrueなら取得。 取得したデータを別テーブルに追加していってスケジュール表を作りました。 申し訳ないのですが、別のことでもう少し教えて頂きたい事があります。 スケジュール表を更新した日付等、ちょっとした情報を保存しておきたいのですが、 その為だけにわざわざ新しいテーブルを作るっていうのはおかしいですか? 保存しておきたい情報としては、更新日付、いつから〜いつまでのデータを スケジュール表に取得しているかという情報くらいです。 スケジュール表は3種類あるので保存するレコード数は3件以上には絶対にならないので たった3件の情報の為だけのテーブル作るっていうのは、変なのかなと思いまして 皆さんのご意見をいただけたらと思います。 お願いします。
253 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 11:14:59 ] DBを使うのはやめてOSファイルに書き出すのはどうだろう。 DataSetに全部突っ込んでテキスト(XML)で保存するのもいいアイデアだと思う。
254 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 12:59:33 ] いい加減、VB.NET関係ない話は該当するスレ(板)で聞け
255 名前:225 [2009/06/27(土) 15:13:48 ] >>254 VB.NETで作ってるので、関係ないとは一概に言えないと思います。
256 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 15:30:58 ] 関係ないだろ。
257 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 13:18:40 ] >>252 書いてあることだけみると、他の人のアドバイスを元にDBから作り直せば3時間くらいで作れそうな気がするんだけど、 それでも「時間的な関係で」って結局そのままつくり続けるならここで聞く意味ないんじゃないか? とりあえず更新日付等の情報を保存するためにテーブルを作るのは別に問題ないと思うけど、その程度の情報なら、 更新が起きたときにそのテーブルのレコードをUPDATEするんじゃなくて、INSERTしてログ的な使い方のほうが、そのデータをほしいって言った人の要求に近いんじゃないか。 更新対象のスケジュール日付、更新した人、作業内容(追加、修正、削除等)、更新日 みたいな感じのログにしておけば当面の要求はこなせると思う。 毎月1日実行のスケジュールを追加したら12個ログができるような感じで。 業務スケジュールっていうことだし、多分そんな頻繁に変更がないから、容量もそんなにくわないと思う。
258 名前:デフォルトの名無しさん [2009/06/28(日) 15:03:59 ] 質問させてください。 vb.netで開発したwebサイトを実行環境から確認しようと IISを利用してアクセスしたのですが、 以下のようなエラーが出てしまいました。 BC40056: インポート 'Oracle.DataAccess.Client' で指定された名前空間または型が、 パブリック メンバを含んでいないか、または見つかりません。 名前空間または型が定義されていて、 少なくとも 1 つのパブリック メンバを含んでいることを確認してください。 また、インポートされた要素名がエイリアスを使用していないことを確認してください。 開発環境からは正常に実行できていたのですが、 実行環境からだとこのようなエラーが出てしまい困っています。 どなたか助けてください。 使用しているソフト等 windows xp VWD ODBC ODP.NET Oracle11g
259 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 15:07:36 ] machine.config か web.config に参照設定を記述しろ、ってなかったか?
260 名前:258 [2009/06/28(日) 15:20:02 ] >>259 「参照設定を記述しろ」っていう表示はどこにもなかったです。
261 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 16:03:09 ] otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/win.111/E05791-01/featConfig.htm とかは違う? IIS への発行はどうやったの? 実行環境に、Oracle のクライアントはインストールしてある?
262 名前:258 [2009/06/28(日) 16:17:05 ] >>261 IISへの発行は、コントロールパネルの「プログラムの追加と削除」→「コンポーネントの追加」からIISを追加して、 ネット検索を経て、設定を済ませました。 < ローカルホスト> でIISが表示されるようになっています。 OracleDBサーバーと、実行環境が同じPC上で行われています。 Oracle11gがインストールされているPCなので、 Oracleクライアントは必要ないかと判断しました。 また、リンク先のページを拝見しましたが、いまいち理解ができません;
263 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 16:21:00 ] んで、開発環境と実行環境は別 PC なのね? どちらも 32ビット? Oracle DB が入ってても、クライアントがインストールされてなきゃダメ。 まずはそこを確認してみて。
264 名前:258 [2009/06/28(日) 16:27:54 ] >>263 ありがとうございます。 開発環境と実行環境は別PCです。 どちらも32ビットです。 今からOracleクラインアントを OracleDBサーバーにしているPCにインストールしてみまつ。
265 名前:258 [2009/06/28(日) 16:49:52 ] >>263 確認したのですが、OracleDBサーバーにしているPCに クライアント10gがすでにインストールされていました。
266 名前:デフォルトの名無しさん [2009/06/28(日) 17:52:33 ] 皆さんは帳票の出力はCrystalReportを使用してますか? 現在帳票はACCESSで使用しています。 今回、フォームをVB.NETで作成しなおし、DBはACCESSを使用することにしました。 帳票がかなり複雑でビジュアル的にも良くできているのですが、それを VB.NETで作り直すのがかなり困難だということをひしひしと感じております。 皆さんだったらどうしますか?
267 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 18:00:13 ] クリリポ、Active Reports、iText あたり。
268 名前:258 [2009/06/28(日) 18:09:14 ] Oracleクライアントはインストールされているのですが、 未だに上手くいきません。
269 名前:266 [2009/06/28(日) 18:10:13 ] ActiveReoprts良さそうなんですが会社で買うことが出来ないので 無料ツールはありませんか?
270 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 18:14:35 ] どうもこうもPrintDocumentでガシガシ書くだけだわな
271 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 18:15:41 ] つーかこのage厨は…
272 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 18:21:47 ] >>268 アプリの web.config はどうなってんの?
273 名前:258 mailto:sage [2009/06/28(日) 18:28:44 ] >>268 すみません。 「どうなってんの?」というのは具体的にどの部分のことを指しているのでしょうか?
274 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 18:32:13 ] つーか、参照設定がおかしいんじゃね? って言われてるんだから、 そこを調べろよ。
275 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 18:38:01 ] まぁ、どうやって調べたらいいんですか? とかだろうなw
276 名前:258 mailto:sage [2009/06/28(日) 18:44:03 ] >>274 参照設定は既に設定済みです。 「.NET」タブから一覧を表示させ、 「Oracle.DataAccess」が追加されています。
277 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 18:46:11 ] それは開発環境の話だろ・・・
278 名前:258 mailto:sage [2009/06/28(日) 18:56:37 ] >>277 すみません。 勘違いしておりました。 どの箇所の参照設定なのか教えて頂けますでしょうか?
279 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 19:14:42 ] ここで質問したからには、 他コミュで質問できないからな? 某掲示板や某フォーラムなどですると 「マルチ禁止!」のレスがつくからな 気をつけろよ・・・
280 名前:266 mailto:sage [2009/06/28(日) 19:59:32 ] PrintDocumentとCrystalReportはどちらの方がおすすめですか? 今回私の作りたいのは、1週間のスケジュール表になります。 日ごとに四角の枠を配置し、その中にその日の予定をテーブルから 書き出すことになります。 CrystalReportでとりあえず作ってみたものの、印刷プレビューで表示 すると実際の配置とかなりずれて表示されるので、本当に実現できるのか 不安になってきました。 予定表のテーブルから日をキーにしてレコードを取得後、日(曜日)ごとにDataSetを 作成してデータを突っ込んでます。 1週間分なので曜日のDatasetが7個できる形になります。 それをCrystalReportに渡して、曜日ごとの枠に収まるようにレコードを入れていきたい のですが、全然綺麗に配置出来ないし、途方も無い作業でへこんでます。 だからといって皆さんに愚痴ってもしょうがないんですが、あまりにもレポート機能が しょぼすぎて、ACCESSよりも劣ってるなんて残念でしょうがないです。 基本的にやり方としては間違ってないですか?
281 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 20:11:56 ] ある程度フォーマットが決まってるならクリリポ。 変なフォーマットなら、自由度の高い PrintDocument だな。
282 名前:266 mailto:sage [2009/06/28(日) 20:14:30 ] >>281 PrintDocument使うって事は、コードのみで書いていくんですよね・・・ 例えば、エクセルで作るような表(網掛けなど)も可能ですか?
283 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 20:17:10 ] Box の塗りつぶしでできるレベルだな。 つーか、Access がいい、っていうなら、Access でやれよ。
284 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 20:29:01 ] >>278 Web.configにいろんなDLLの参照設定が書かれてないか? それとサーバにODP.NETはインストールしてるのか?
285 名前:266 mailto:sage [2009/06/28(日) 20:36:31 ] >>283 会社でVB.NETで作るっていることに決まったんで、 ACCESSで作る事ができません・・・
286 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 20:43:33 ] だったら文句言わずにやれよ。 文句言うくらいなら、会社のやつらを説得すればいい。
287 名前:266 mailto:sage [2009/06/28(日) 21:01:55 ] >>286 はぁ?CrystalReportで作ってるってさっきから言ってるだろう。
288 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 21:08:20 ] じゃ、Crystal Reports スレでも行けよ。スレ違いだから。
289 名前:266 mailto:sage [2009/06/28(日) 23:04:43 ] こりゃしっけいいたしました
290 名前:266 mailto:sage [2009/06/28(日) 23:13:36 ] ってCrystalReportすれないじゃないか。騙された。
291 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 12:18:06 ] 先生方〜馬鹿な私にアドバイスをください orz VC++2008のWin32プロジェクトで開発した共有メモリのDLLを VB.net2008から呼び出すプログラムを製作しています。 DLL内部で保持している構造体を参照渡しして共有する仕組みです。 ですが、下記記述だと構造体内部の配列(stSub1〜3)が Nothingの状態になったままです。VB初心者の私にアドバイスをお願いします ちなみにOSはWinXPです。よろしくお願いします。 ※記述は改行数の関係上、次の書き込みに書きます
292 名前:291 mailto:sage [2009/06/29(月) 12:19:57 ] 続き(2/3) 見づらいと思いますがご了承ください orz ------------------------ VC++記述 ------------------------ typedef struct { short s1; short s2; }ST_SUB; typedef struct { ST_SUB stSub1[10]; ST_SUB stSub2[10]; ST_SUB stSub3[10]; }ST_AREA; DLL関数:HANDLE MemOpen(PVOID* Address)
293 名前:291 mailto:sage [2009/06/29(月) 12:22:28 ] ------------------------ VB記述 抜粋 ------------------------ Public Structure ST_AREA Dim s1 As Short Dim s2 As Short End Structure Public Structure ST_AREA Dim stSub1() As ST_SUB Dim stSub2() As ST_SUB Dim stSub3() As ST_SUB End Structure Public stArea As ST_AREA Declare Function MemOpen Lib "xx.dll" (<MarshalAs(UnmanagedType.Struct)> ByRef Address As ST_AREA) As Integer Private Sub BtnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnOpen.Click Dim iRes As Integer iRes = MemOpen(stArea) End Sub
294 名前:291 mailto:sage [2009/06/29(月) 13:05:52 ] 293のPublic Structureは ST_AREAじゃなくST_SUBだった o..rz
295 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:37:07 ] MSDNのアンマネージ コードとの相互運用の中にあるサンプルみれ
296 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:11:52 ] そもそも違うプログラム同士で、変数の値などを共有(メモリの共有)をするにはどうしたらいいんでしょうか? どこかに解説サイトないでしょうか
297 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:55:08 ] つーか、宣言が全然おかしいじゃん。 メモリマップドファイルとか、プロセス間通信系かな。>共有
298 名前:291 mailto:sage [2009/06/30(火) 09:34:04 ] >>295 ありがとです。 PVOID*なのでクラスにしてちと試してみます >>296 C++ならCreateFileMappingとかあるみたいですよ。 ほかの言語はわかりません。
299 名前:291 mailto:sage [2009/06/30(火) 10:34:29 ] 連続申し訳ないです。。。 C言語なら ST_AREA *pStArea MemOpen(&pStArea); pStArea->stSub1[3].s2 = 10; とかやれば直接書き込みできるのに VBってこういうことできないんですか? IntPtrのようなもので受け取らないとだめですかね?
300 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 10:52:14 ] つ「構造体のサンプル」
301 名前:291 mailto:sage [2009/06/30(火) 13:51:15 ] >>300 先生ありがと! サンプルを元にやってみたけど 他アプリから値を変えても値が変わらない。。。 値渡しになってる? Public Structure ST_SUB Public s1 As Short Public s2 As Short End Structure <StructLayout(LayoutKind.Sequential)> _ Public Class ST_AREA <MarshalAs(UnmanagedType.ByValArray, SizeConst:=10)> _ Public stSub1 As ST_SUB() <MarshalAs(UnmanagedType.ByValArray, SizeConst:=10)> _ Public stSub2 As ST_SUB() <MarshalAs(UnmanagedType.ByValArray, SizeConst:=10)> _ Public stSub3 As ST_SUB() End Structure Public stArea As ST_AREA Declare Function MemOpen Lib "xx.dll" (<MarshalAs(UnmanagedType.Struct)> ByRef Address As ST_AREA) As Integer Private Sub BtnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnOpen.Click Dim iRes As Integer iRes = MemOpen(stArea) End Sub
302 名前:291 mailto:sage [2009/06/30(火) 13:54:35 ] End StructureじゃなくてEnd Classだ o...rz Openしたときは最後に書き込んだ値が取れます。 VB側から書き込んでも相手の値は変わらず。。。
303 名前:291 mailto:sage [2009/06/30(火) 16:17:43 ] お、落ち着くんだ私。 Declare Function MemOpen Lib "xx.dll" (ByRef Address As ST_AREA) As Integer だな。 Cで書かれてるDLLの引数の型がPVOID*だから構造体でなくクラスで合ってると思うけど オープンした時のみ値が取得できる状況です。。。 助けてティーチャー orz
304 名前:デフォルトの名無しさん [2009/06/30(火) 16:31:44 ] ByValArrayは構造体専用 構造体にしてByRef IntPtrで受けるか、配列の要素を全部フィールドに展開するか
305 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 02:11:46 ] DataSetてどういう場合に使用するものなのでしょうか? mdbファイルにadoを使いデータを抽出(SQL文を使用) この抽出結果を一時的に保管しておく器とかに使うものなのでしょうか?
306 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 07:34:02 ] >>303 > Cで書かれてるDLLの引数の型がPVOID*だから構造体でなくクラスで合ってると思うけど 意味がわからん。P/Invoke のサンプルからやり直せ
307 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 07:34:13 ] >>305 そんな感じ。
308 名前:デフォルトの名無しさん [2009/07/01(水) 10:02:21 ] >>306 ポインタへのポインタが必要だから参照型(構造体ではなくクラス)の参照渡しにすればいいんだよ 理屈は間違ってない
309 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 10:39:35 ] >>305 SQLでの問合せの結果(複数行)をとっとくのがDataTable、 DataSet は DataTable のコレクション+αの機能。
310 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 10:41:48 ] >>308 すごく…おかしいです。
311 名前:デフォルトの名無しさん [2009/07/01(水) 10:57:19 ] おかしいも何も、MSDNに書いてある
312 名前:291 mailto:sage [2009/07/01(水) 11:26:45 ] >>308 さんのおっしゃるとおり ttp://msdn.microsoft.com/ja-jp/library/awbckfbz(VS.80).aspx 上記サイトの アンマネージ シグネチャ マネージ宣言 1 レベルの間接参照 class MyStruct(…); DoWork(MyStruct** x); DoWork(ByRef x As MyStruct) 部分をみて構造体ではなくクラスにしないといけないのかなと判断してます 解釈が間違ってますかね? >>304 さん >構造体にしてByRef IntPtrで受けるか この意味が私の考えで合っているのかわかりませんが、 IntPtr型でポインターのアドレスを受け取り 構造体にキャストして割り当てるということなのでしょうか? それとは別に、クラスにしてByValArray以外の方法(参照渡しができる方法)で 配列を作って引数に渡すことができればなぁと考えています。 考え方がC言語に偏っているので変なことを言ってるかもしれませんが 先生方、どうか温かい目でアドバイスをお願いします m(_ _)m
313 名前:デフォルトの名無しさん [2009/07/01(水) 11:40:47 ] クラスなら配列の要素と同じ数だけフィールド並べるしかないんじゃないの
314 名前:デフォルトの名無しさん [2009/07/01(水) 11:56:18 ] 構造体として定義して、その配列を参照渡し(ByRef)してみるのはどうだろう でも配列渡すならアドレス固定しないといけないから、IntPtrで受けてMarshal.PtrToStructureの方がまだ簡単確実
315 名前:314 [2009/07/01(水) 12:03:44 ] アドレス固定したら結局IntPtrで渡すことになるな 一行目撤回
316 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 13:12:57 ] >>299 >VBってこういうことできないんですか? P/Invoke で外部関数呼び出し時には引数の変換がされるが、それ以外のタイミングで Managed なコードから Unmanaged な領域を弄る簡単な方法はない。 おとなしく Marshal の共有メソッド (Read〜/Write〜等) に IntPtr を渡す方法を試せ。
317 名前:デフォルトの名無しさん [2009/07/01(水) 13:14:58 ] やっと理解できた VBのメンバを通してC側に直接書き込もうとしてたのか マーシャリングでは無理だ VBでは構造体も使えない IntPtrで受けてMarshal.WriteByteでも使って直接書き込むしかない
318 名前:291 mailto:sage [2009/07/01(水) 15:41:43 ] 先生方いろいろとありがとうございました。 以下のように落ち着きました(ST_SUBは以前のまま) Public Structure ST_AREA Puclic BaseAddr As IntPtr Default Public Property stSub1(ByVal index As Integer) As ST_SUB Get Dim Offset As Integer = index * Marshal.SizeOf(GetType(ST_SUB)) Return CType(Marshal.PtrToStructure(BaseAddr, GetType(ST_SUB)), ST_SUB) End Get Set(ByVal value As ST_SUB) ' indexのサイズ超えは省略 Dim Offset As Integer = index * Marshal.SizeOf(GetType(RDS_DATA_AREA)) Marshal.WriteInt16(BaseAddr, Offset, CType(value.s1, Short)) ' ここをまとめたい Marshal.WriteInt16(BaseAddr, Offset + Marshal.SizeOf(value.s1), CType(value.s2, Short)) ' まとめたいよ End Set End Property 'stSub2 と stSub3 も同様 オフセットを間違えないように!! End Structure Public stArea As ST_AREA Declare Function MemOpen Lib "xx.dll" (ByRef Address As IntPtr) As Integer Private Sub BtnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnOpen.Click Dim iRes As Integer = MemOpen(stArea.BaseAddr) stArea.s1 = 10 'テストですよ End Sub SetのWriteInt16を一行にまとめたいとこですが思いつかなかったのでこんなです。 相手側アプリとの確認も取れました。VBむずかしいです orz ありがとうございました〜
319 名前:291 mailto:sage [2009/07/01(水) 16:00:09 ] XXX = stArea.s1 はできたけど stArea.s1 = 10 はできてなかったorz まぁでも何とかなりそうです^o^
320 名前:デフォルトの名無しさん [2009/07/03(金) 20:13:21 ] XmlDocumentのSaveメソッドで「'」を「'」として書き出す方法ってないのかな?
321 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 20:51:09 ] ウィンドウと内部処理(DLL)を別のプロジェクトで作成しました。 質問は、DLLからFormに張ってあるコントロールのプロパティを変更する方法です。 Labelの文字を変える程度でいいのですが。 よろしくお願いします
322 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 21:19:41 ] >>321 フォームから DLL にコントロールの参照を渡してやれば OK
323 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 22:15:41 ] VS2005です ユーザーコントロールにDataGridViewを貼り付けてColumnを2つ追加しました これにイベントハンドラを記述するとユーザーコントロールのコンパイルは通りますが コントロールの読み込み時にエラーが発生します 'RowsAddedイベントハンドラ Private Sub DataGridView1_RowsAdded(ByVal sender As Object, _ ByVal e As DataGridViewRowsAddedEventArgs) _ Handles DataGridView1.RowsAdded DataGridView1.Sort(DataGridView1.Columns(1), ListSortDirection.Descending) End Sub 列のSortModeがNotSortableに設定されているとき 列ヘッダーのSortGlyphDirectionをDesendingに設定することはできません というエラーが出てるようですが、プロパティではSortModeはAutomaticになってます ほわい?
324 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 22:28:19 ] なってます、ってどうやって確認したの?
325 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 22:34:02 ] >>324 ありがとうございます。 DataGridviewの設定はすべてデザイナでやってますので
326 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 22:37:02 ] 改行したら送信してしまいました つづきです デザイナでやってて、Columnもデザイナであらかじめ追加してます デザイナ上でのプロパティではAutomaticになっております
327 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 22:47:38 ] とりあえず、デザイナで設定したプロパティは忘れて、 'RowsAddedイベントハンドラ Private Sub DataGridView1_RowsAdded(ByVal sender As Object, _ ByVal e As DataGridViewRowsAddedEventArgs) _ Handles DataGridView1.RowsAdded If ...SortMode <> NotSortable Then DataGridView1.Sort(DataGridView1.Columns(1), ListSortDirection.Descending) End If End Sub みたいにしてみるとか、エラーが出たときにウォッチしてみるとか、 その辺で確認してみたら?
328 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 23:07:50 ] 了解っす
329 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 00:02:23 ] うまく行きました! データがない状態の時NotSortableになってんのかな? ありがとうございました
330 名前:デフォルトの名無しさん [2009/07/04(土) 00:19:06 ] >>320 そんなに大きくないならStringWriterで文字列に書き出して置換すれば
331 名前:デフォルトの名無しさん [2009/07/05(日) 14:28:39 ] DataGridViewにdataset内部でリレーションシップを設定したTableA TableBのフィールドを表示したいんです TableAとTableBは1対多結合になります フィールドは同一のDataGridViewで表示したい TaleBを連結したDataGridViewに非連結列を追加してTableAのフィールドを検索して貼り付けることはできそうですが なんかデザイングリッド上でぱぱっとやれそうな気がしておたずねしました 何とぞよろしくお願いいたします
332 名前:デフォルトの名無しさん [2009/07/05(日) 15:31:23 ] ググっても見つからないので質問させてください。 Textboxに入力されたデータから特定の行(ex:15行目から20行目)だけを取り出したいのですが、何か方法はないでしょうか? よろしくお願いします。
333 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 15:36:17 ] >>332 どう検索したのか興味がある Linesから適当に取得すればいいっしょ
334 名前:デフォルトの名無しさん [2009/07/05(日) 15:50:04 ] >>333 初心者故に文字列の取得方法が分かりません。 申し訳ないです。
335 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 16:16:51 ] 答え出てるじゃんw
336 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 16:18:49 ] DataGridViewをほぼ同じような表な形で印刷したいのですが、自分でライン書いて表の中のデータを書くというっ事をしなければならないんでしょうか? DataGridviewをそっくりそのままの形のレイアウトで印刷してくれるようなもっと簡単なのがあってもよさそうなのですが・・・
337 名前:デフォルトの名無しさん [2009/07/05(日) 16:22:09 ] >>335 すいません、Linesはどのように扱えばいいのでしょうか