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


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

VB.NET質問スレ(Part30)



1 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 10:00:19 ]
前スレ

VB.NET質問スレ(Part29)
pc12.2ch.net/test/read.cgi/tech/1235206416/l50

テンプレは>>2

210 名前:デフォルトの名無しさん [2009/06/23(火) 19:50:53 ]
VBAのマクロを生成できるから何でもできる

211 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 20:23:57 ]
調べてもマクロ呼び出ししか出てこないけど。
VB.net上で書いたソースをどの参照からマクロ登録することが出来るんだろう。
どなたかサンプルソースがあるところ教えてください

212 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 20:38:49 ]
>>211
officetanaka.net/excel/vba/vbe/06.htm

213 名前:デフォルトの名無しさん [2009/06/23(火) 22:44:41 ]
VB2005でftpクライアントの機能作ってます。
WebRequestMethods.Ftp でサーバにあるファイル名を取ってくるときに、
2バイト文字のファイル名だと化けてしまいます。
化けないで正しいファイル名を取得する方法はないでしょうか?

214 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 22:53:11 ]
FTPではマルチバイト文字は未定義なのよね
TcpClient or Socket使って自分でFTP喋るしかないんじゃないかなぁ
まあどっかにその辺の対応も含んだ野良FtpClientがあるかもしんないけど

215 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 02:26:15 ]
化けるって、どこでどう化けるんだ?

216 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 22:10:40 ]
テキストボックスのD&Dで
テキストのD&Dは
Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter
If e.Data.GetDataPresent(DataFormats.UnicodeText) Then
e.Effect = DragDropEffects.Copy
End Sub

で処理できるのですが、インターネットエクスプローラに表示されているWEBページの
リンクの文字をD&Dした際に、HTMLに設定されたURLを取得するにはどのように書いたら良いでしょうか?

217 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 22:52:44 ]
"UniformResourceLocator"でデータ取得
MemoryStreamにキャストしてそこからRead
Chr(0)を探してその直前までをEncoding.Default.GetString

218 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 22:54:22 ]
あ、Chr(0)じゃなくていいか、単に0探すだけで



219 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 00:14:36 ]
レスありがとございます。
その方法はアドレスバーのURLの左にあるアイコンをD&Dする方法ではないでしょうか?
HTMLのリンクになっているテキストはドラッグしても通行禁止のマークのままなのですが・・・

220 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 00:18:44 ]
普通にa要素のD&Dを取れる
IEとFxで確認した
あ、EffectはCopyだけじゃなくてLinkも入れないと駄目かも

221 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 00:20:03 ]
どぼんさんのHPにあるじゃないか
ttp://dobon.net/vb/dotnet/control/dropfromwebbrowser.html

222 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 00:20:17 ]
ありがとうございます。
DragDropEffects.Copy→DragDropEffects.Link
の変更で受け取れました。助かりました。


223 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 02:06:49 ]
OSを起動後に起動時の処理(スタートアップのプログラムの起動など)の一番最後に
(PCがアイドル状態になったら)自分のアプリを起動したいのですが、
OSが起動後にそのような状態になったというのはどのように調べたら良いでしょうか?
ちなみにWindowsXP-PROです。

224 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 14:03:50 ]
hint
wmic path Win32_Processor get LoadPercentage

225 名前:デフォルトの名無しさん [2009/06/25(木) 14:04:10 ]
すみません。自分の開発してるプログラムでつまずいてしまったので教えてください。
現在業務をスケジュール管理するプログラムを作っています。
業務を登録する画面では、1月〜12月、1日〜31日までのチェックボックスを
それぞれ作っています。
例えば1月〜12月と1日のチェックボックスをチェックすると、毎月1日の業務
として登録され、スケジュール表に毎月1日だけその業務が表示されるような
ものを作りたいと思ってます。
データベースはACCESSを使用しており、月と日のチェックボックスに対応する
項目としてはYes/No型で1月〜12月、1日〜31日まで全て作っています。

今つまずいている点は、日付を指定してDB上からその日付に該当する業務を取得
したいのですが日付によってチェックするフィールドの位置が違う為、
どのようにすればいいか悩んでいます。
例えば6月1日の業務を取得したい場合、DB上で6月フィールドにチェックがあるかどうか
の確認が必要になりますが、日付によって確認するフィールドを動的に変える方法を
教えてください。

1月1日の場合〜、1月2日の場合〜とコーディングしたら365日分つくらないと
いけないので(こんな案しか思いつかなかったorz)良い案があれば教えて下さい。

226 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 14:16:31 ]
DBのテーブルは与えられてるもの?自分でいじれるもの?

227 名前:225 [2009/06/25(木) 14:17:56 ]
連投すみません。
フィールド名を変数で定義出来れば多分出来るかなと思います。

1月の場合、変数に"1月"と代入しその変数=trueのレコードを取得とするような
クエリにぶちこめば動くようにしたいです。


228 名前:225 [2009/06/25(木) 14:20:31 ]
>>226
DBは自分でいじることが出来ます。
本当にド素人なんでどういったやり方がスマートなのかわかってないので
、こういうプログラムを作るときは普通こういった方法をする
と言ったアドバイスを頂けたらと思います。
よろしくお願いいたします。



229 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 14:23:31 ]
Accessを使ってるとフォームを作りやすいようなイメージでテーブルを
作ってしまうのだろうけどそこが誤りだろうな。
日付によって読みに行く場所が違うというのが異常だからそこを直すべき。

230 名前:225 [2009/06/25(木) 14:58:45 ]
>>229
つまり1月〜12月、1日〜31日のフィールドっていうのが異常って事ですよね?
むずかしいです・・・

231 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 16:24:00 ]
まず、フィールドってのがRDB上の属性(カラム)なのかGUI上のコントロールなのかよくわからない
可能ならとりあえず現状のスキーマとSQLクエリでも晒してくれ

232 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 16:30:58 ]
RDBの流儀でいえばこんな感じのスキーマになると予想

スケジュール表 [ 日付, 業務種別ID, 実業務ID ]
業務マスタ [ 業務種別ID, 業務名, 実業務テーブル名 ]
(実業務表) [ 実業務ID, 必要な情報・・・ ] ←業務ごとに作成


233 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 17:39:47 ]
>>225
プログラムで動的にSQLを生成して実行する
フィールド名も動的に変更できる

>>229
今回の要件なら、俺でも1−12月のフラグと1−31日のフラグもつかもしれない
まあ、ホントは後で書くスキーマのようにするのが正解だろうけど

>>232
登録するのは、業務の繰り返し頻度であって、業務のスケジュールそのものじゃないぞ
そのスキーマだと、日ごとスケジュールの生成って作業が必要だな
そして繰り返し頻度を変更した場合、今あるスケジュールを全部けして再生成
さらに何年先までのスケジュールを生成していいのか不明

俺の予想スキーマ

業務マスタ(業務ID,業務名,その他必要な内容)
業務頻度月(業務ID,業務実行月)
業務頻度日(業務ID,業務実行日)

指定月日の業務を知りたければ、この三つを業務IDでjoinして
業務頻度月.業務実行月=指定月日の月 and 業務頻度日.業務実行日=指定月日の日 を検索

まああれだ。DB設計の話は板違いだな

234 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 22:34:03 ]
DBも気になるけどチェックボックスが大量に並んでいる画面を想像してぞっとした
あ、チェックボックスのリストコントロールとかもあるか・・・

235 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 04:16:35 ]
大量って言っても、12個+31個だからなぁ

カレンダー系のマスタメンテとかで、31個のチェックボックスを
並べるのなんて結構やってるし

まあしかし、>225からここまで1回もvb.netって言葉が出てないじゃないかw


236 名前:デフォルトの名無しさん [2009/06/26(金) 13:36:39 ]

おい、出すなよ。

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
すごく…おかしいです。






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

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

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