DOBON.NETプログラミング道掲示板

■ 「新規作成」から投稿できます。
■ マルチポストされた投稿を見つけたときは、その投稿に返信することによりご報告ください。その際は匿名で投稿し、マルチポストされている場所を併記してください。
■ スパム対策のため、メールアドレスの先頭に"_"という文字が付加されています。
RSS 2.0 RSS 2.0 | RSS 0.91 | 携帯電話用 | 自分専用のアイコンを使用するには | 掲示板への要望 | 管理人に連絡 | お気楽掲示板
■ 24時間以内に作成されたスレッドは New で表示されます。
■ 24時間以内に更新されたスレッドは UpDate で表示されます。

記事リスト ( )内の数字はレス数
Nomal非同期プログラミング時のConsole.WriteLineの動作(4) | NomalC#からストアドにDecimalを渡すと値が丸められる(4) | Nomalインスタンスの型を文字列で指定したい(2) | NomalSendKeys.Sendが効いていない(2) | Nomal他のプロジェクトのコントロールがツールボックスに表示されない(3) | Nomal複数のテキストボックス間のTextChangedイベントが相互干渉しないようにしたい(9) | Nomal呼び出し元によってWebApi側の処理速度に差が出る(1) | NomalPanelのDock=Topだとうまくいかない。代替案。(2) | Nomal.NetでのIPv6の比較(5) | Nomal追加コントロールのtabindex値を既存の間に設定する方法(1) | Nomal.Net 5.0 におけるDLL参照問題?(7) | NomalVB.net非同期処理でtextboxに出力したい(2) | NomalToolStripStatusLabelの空白部分を埋めたい(2) | NomalOracle への OleDb 接続に失敗する(3) | Nomal正規表現で株価を取得したい(1) | Nomal親スレッドへ処理の移譲(7) | Nomalデザイナで編集・チェックアウトキャンセルすると(3) | NomalVB.NETで作成したDLLをVB6.0から呼び出す(3) | NomalVB.NETからRDゲートウェイを利用したリモートデスクトップ接続(4) | NomalクラスによるGetBytes関数のエンディアンの違い(2) | Nomal.Net 5.0 におけるServiceControllerの代替クラス(3) | Nomal[VB.NET]Excelのプロセスが終了しない(2) | NomalC#をVBに変換した際の強制的な参照渡し(2) | Nomal新たにshowしたフォームでのボタンのクリック(5) | Nomalリッチテキストボックスの文字を太文字にしたい(2) | NomalVB.netにおける固定長出力方法(3) | NomalDataObjectの使いまわし(5) | NomalLIstview のDataSource(2) | NomalClassの作り方(2) | NomalOpenFileDialogの初期ファイル名の表示が変(1) | NomalVB.NETのVBA化(2) | Nomal改行のコード(7) | NomalGoogle翻訳の結果の取得(2) | NomalStopwatchクラスのElapsedMillisecondsの挙動(2) | Nomal.net Chartで二重ドーナツグラフの作り方(3) | Nomalexeをショートカットから起動した場合のエラー(2) | Nomalデスクトップ と Desktop(6) | Nomalデザイナのプロパティウィンドウで静的プロパティを選択したい(3) | NomalPHPでシリアライズした、データをデシリアライズしたい(4) | Nomal二次元配列 インデックスが配列の境界外(2) | NomalVB.netで作成したexeのNgenによる弊害(1) | NomalDrawBezierの使い方について(7) | Nomalメジャーバージョンの異なるLog4netライブラリを参照したい(4) | NomalVB6→2005変換時のDeclare宣言のマーシャリング属性(8) | NomalGROUPBOXの複製について(vb.net)(1) | NomalActiveReports 3.0からActiveReports 7.0へのァイルコンバータについて(4) | NomalAccess OLEでExecuteNonQuery(3) | NomalKeyDownでの右コントロールキーイベント(2) | NomalExcel複数シートの印刷順序(3) | NomalWMPへno(3) | NomalDataGridViewの行番号(7) | Nomalapp.config定義によるネットワークトレースログの世代管理(2) | Nomalrelease/debugのどちらで作成されたものかを判断する方法(2) | NomalC#コンソールアプリでタイピング練習ソフト作成(3) | Nomal自分自身を呼び出すのはOKですか(1) | NomalWebBrowser Control foreachで値が消える(2) | NomalDeclare宣言するdllと参照追加をするdllの区別(4) | NomalTaskクラスを.NET Framework 2.0で実現させる方法(2) | NomalVS2017で作成されたDLLをVS2005で作成されたAPで使用する方法(4) | NomalWebBrowser Controlを使って、任意の値を取得(5) | NomalEditボックスに簡体字をセットする方法(2) | NomalList型でエラーが起きてしまい・・・(1) | Nomalフォルダ内の全ての容量を取得したい(4) | NomalWebClientが上手く動かない(2) | Nomal共変性と反変性ってこういうこと?(4) | Nomalモードレスフォーム Warning IDE0067を回避したい(7) | NomalLINQの拡張メソッドの定義(1) | Nomalこんな演算子初めて見ました。(5) | Nomalプロセスからウインドウを取得(4) | Nomalフォーム外のカーソルの変更(2) | NomalLINQのメソッド構文の書き方(3) | NomalVB.NETでCSVを読み込む際にSQL文を使いたい(3) | NomalRichTextBoxで入力文字の自動折り返しを止めたい(2) | NomalRichTextBoxで入力文字の自動折り返しを止めたい(5) | Nomalラムダ式の勉強中(2) | NomalWebClientで、短期間にDownloadStringAsyncを実行したい(2) | Nomalvb.net+SQLiteで複数データベースファイルへのトランザクション方法(3) | NomalNewの使い方間違ってますか?(4) | Nomalジェネリック型インターフェースを使った変数を扱いたい(3) | NomalC#をVBに変換(2) | NomalProcess.WaitForExitで正常に動作しない?(3) | NomalCatch時のex.StackTraceの情報(3) | Nomalユーザーコントロール内のテキストボックスのmodifiedプロパティ(4) | NomalPictureBox.Locationのキャンセル(3) | NomalJOIN操作の構文エラー(4) | NomalVisualStudioでマクロ(3) | NomalVisualStudioでExcelのVSTO開発(3) | NomalOracleDataAccess を参照したプログラムでデバッグモードが機能しなくなる(3) | NomalIE11では表示されるが、.netのWebBrowserでは、表示されないHPを表示する方法(7) | NomalマウスのないOSでマウスカーソルの表示(2) | NomalRDP接続でのネットワーク帯域制限(0) | NomalFILE.COPYでIOExceptionエラーが出る(11) | NomalToolStripMenuItemにShortcutKeysを指定した際の、元のコントロールを取得する方法(2) | Nomal動的にプロパティや変数の値の取得(4) | NomalVB6 ほかのアプリケーションを起動し そのアプリケーションは終了させる方法(4) | NomalMouseEventArgsのカレント座標(2) | Nomalリッチテキストボックスでの字間の調整(2) | NomalDrawImage でメモリ不足エラー(3) | Nomal必須コンポーネントの一覧に追加したい(0) | NomalCode128でバーコードが読み取れない(8) |



■記事リスト / ▼下のスレッド
■34521 / 親記事)  VB.netで作成したexeのNgenによる弊害
□投稿者/ 金ちゃん 一般人(1回)-(2020/08/05(Wed) 15:41:37)
  • アイコン環境/言語:[VB.net Oracle ODP.net] 
    分類:[.NET] 


    お世話になっております。金ちゃんと申します。

    今回VB6からVB.netにマイグレーションを行いました。
    DBはOracleでVB.netからはODP経由でDB接続していますが、
    何故かコンパイルしたexe(3Mぐらいのサイズ)にNgenをかけるとDB接続だけで1.5秒ぐらいかかってしまいます。
    逆にNgenをかけなければ0.5秒ぐらいでDB接続出来ます。
    Ngenする事でNgenなしの場合と比べて性能が劣化するパターンがあるのでしょうか?
    ※exe起動直後にDBからデータを取得しパブリック変数に値の格納をする場合にも同じような症状が発生してます。

    漠然とした質問で申し訳ありませんが、藁にもすがりたい状態で困ってます。

    よろしくお願いします。
違反を報告
引用返信

▽[全レス1件(ResNo.1-1 表示)]
■34522 / ResNo.1)  【報告】この投稿はマルチポストです
□投稿者/ (報告) 大御所(275回)-(2020/08/05(Wed) 22:45:17)
  • アイコンこの投稿はマルチポストです。もし元記事の投稿者にマルチポストの心当たりがない場合は、すぐに返信でお知らせください。

    ●マルチポストされている場所
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=95477

    ----------
    この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのルールについて」をお読みください。

    ●書き込みのルールについて
    https://dobon.net/vb/bbs/index.html
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-1]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34510 / 親記事)  DrawBezierの使い方について
□投稿者/ つばさ 一般人(1回)-(2020/07/31(Fri) 17:38:42)
  • アイコン環境/言語:[Win10 VB2017] 
    分類:[.NET] 

     はじめまして、よろしくお願いします。
    Win10でVB2017を使用しています。

    現在、ベジェ曲線をPivtureBox表示に挑戦しています。

    Dim Bezier_1 As New Point(66, 663)
    Dim Bezier_2 As New Point(96, 784)
    Dim Bezier_3 As New Point(96, 784)
    Dim Bezier_4 As New Point(236, 731)

    g.DrawBezier(Pen_Red, Bezier_1, Bezier_2, Bezier_3, Bezier_4)

    と、記述した時の描画が、添付画像になります。
    赤色ラインがVB出力ですが、実際のイラストレーターのライン(黒色ライン)と
    かなり違った結果になります。

    始点終点、制御点が2点の時は問題ないのですが
    制御点が1点の時の3点ベジェ曲線の時にこうなります。

    3点ベジェ曲線の記述方法のアドバイスを頂けたら嬉しいのですが
    よろしくお願いします。(うまく説明できてないと思いますが、すみません。)

191×140
イメージ
2020-07-31.jpg
/17KB
違反を報告
引用返信

▽[全レス7件(ResNo.3-7 表示)]
■34515 / ResNo.3)  Re[3]: DrawBezierの使い方について
□投稿者/ 魔界の仮面弁士 大御所(1290回)-(2020/08/02(Sun) 16:55:03)
  • アイコン
    No34514に返信(つばささんの記事)
    > 3点ベジェの曲線を表示するのは、座標計算をしなければ
    > 思ったような曲線は、得られないようですね。
    
    …あれ?
    
    質問内容は「DrawBezier メソッドの使い方について」であって、
    黒色ラインを描く方法についてでは無いと思ったのですが。
    
    
    曲線の細かい話については、この辺りに書かれていますが、それはさておき。
    http://www.f.waseda.jp/moriya/PUBLIC_HTML/education/classes/infomath6/applet/fractal/spline/
    
    2 次ベジエを 3 次ベジエに変換したいのであれば、2次における
    「始点〜制御点までの 2/3 の位置」と
    「終点〜制御点までの 2/3 の位置」を
    3 次の第一制御点・第二制御点として指定してみてください。
    
    
    > 実際のイラストレーターのライン(黒色ライン)と
    イラストレーター(Illustrator?)を見たことが無いので
    黒色ラインが 2 次ベジエであるという、
    当方の予想が正しいのかは分かりません。
    そちらの仕様確認はご自身で行ってください。
    
    
    
    Module GraphicsExtension
      <System.Runtime.CompilerServices.Extension>
      Public Sub DrawQuadCurve(this As Graphics, pen As Pen, pt1 As PointF, pt2 As PointF, pt3 As PointF)
        Dim p1 As New PointF((pt1.X + 2.0F * pt2.X) / 3.0F, (pt1.Y + 2.0F * pt2.Y) / 3.0F)
        Dim p2 As New PointF((2.0F * pt2.X + pt3.X) / 3.0F, (2.0F * pt2.Y + pt3.Y) / 3.0F)
        this.DrawBezier(pen, pt1, p1, p2, pt3)
      End Sub
    End Module
    
    
    とりあえず上記を貼り付けたうえで、先の
     .DrawBezier(bezierPen, points(0), points(1), points(1), points(2))
    の結果を
     .DrawQuadCurve(bezierPen, points(0), points(1), points(2))
    と比較してみてください。

違反を報告
引用返信
■34516 / ResNo.4)  Re[4]: DrawBezierの使い方について
□投稿者/ つばさ 一般人(3回)-(2020/08/03(Mon) 08:14:24)
  • アイコン説明不足にも関わらづ、追加の解説ありがとうございます。
    最初の投稿画像ですが、説明を加えたものを添付致します。
    DrawBezierの3点での使い方を検索したのですが
    4点での使い方しか無いように思い試してみると違う形の結果でした。

    そこで制御点を作ることを考えたのですが、参考ページがなかったので
    数値を変化させながら結果を重ねて表示することを繰り返しました。
    元の制御点から60%の位置が丁度イラストレーターの画像と
    一致するような結果になりました。

    いくつかテストAIデータを作って、試したのですが問題なさそうです。
     しかし「ベジェ曲線」の描画方法が、誤差を考えると
    こんなやり方のはずがないと思い質問をしました。

    たとえば
      DrawBezier(Color、始点、制御点1、制御点2、終点、描画形式)
        の、ような記述で
    描画形式(ラインの種類)を指定した場合にその指定で描画してくれるのでは?
    この答えは分かりませんでしたので、今回こちらで質問させていただきました。

    2度に渡ってわかりやすい解説、ありがとうございます。

225×206
イメージ
2020-07-30.png
/7KB
違反を報告
引用返信
■34518 / ResNo.5)  Re[5]: DrawBezierの使い方について
□投稿者/ 魔界の仮面弁士 大御所(1292回)-(2020/08/03(Mon) 15:00:00)
  • アイコンNo34516に返信(つばささんの記事)
    > DrawBezierの3点での使い方を検索したのですが
    > 4点での使い方しか無いように思い試してみると違う形の結果でした。

    ベジエ曲線の考え方は、下記のアニメーションを見ると分かりやすいかと思います。
    https://postd.cc/bezier-curves/


    なお、.NET Framework のヘルプで DrawBezier について調べてみると、
    ベジェではなくベジエと表記されているわけですが、Be'zier の発音は
    ベジェよりはベジエの方が原音に近いようです。(ベズィエといった感じ?)



    > 元の制御点から60%の位置が丁度イラストレーターの画像と
    > 一致するような結果になりました。

    2 次 → 3 次変換を、数学的証明した記事がありました。
    60% ではなく、2/3 の位置ですね。
    https://nowokay.hatenablog.com/entry/20070623/1182556929


    3 次 → 2 次はもう少し複雑です。次数を落としている分、
    1 つの 2 次ベジエで表現できるとは限らないので、
    複数の 2 次ベジエ曲線を並べて近似曲線にするなどして対応します。
    http://nutsu.com/blog/2008/021520_as_bezierconvert.html
違反を報告
引用返信
■34519 / ResNo.6)  Re[6]: DrawBezierの使い方について
□投稿者/ つばさ 一般人(4回)-(2020/08/04(Tue) 07:49:18)
  • アイコン お世話になります。
    新たな情報、ありがとうございます。

    制御点の値を3つほど作ってラインを書いてみました。
    その後、AIのラインとVBのラインを重ねての画像です。

    制御点60%でほぼ一致することから、数式から導かれるBezier曲線と
    A社、M社の3点Bezier曲線は独自のものと思われます。

    3点Bezier曲線に関しては、ユーザーが必要な係数を
    探し出しセットする仕様なのかもしれませんね?

    この問題は、最初あまり気にならなかったのですが
    これから先に進めていく過程で、座標計算にて曲線の通過ポイントを
    割り出さなければいけない場面が出てくるのですが
    今の時点で、遭遇できたことは幸いです。

    幾度もの解説、並びにアドバイスいただき感謝しています。
    ありがとうございました。

解決み!
違反を報告
引用返信
■34520 / ResNo.7)  Re[7]: DrawBezierの使い方について
□投稿者/ つばさ 一般人(5回)-(2020/08/04(Tue) 08:10:50)
  • アイコン画像が大きくて、添付できていませんね?
    もう一度、投稿です。
解決み!
158×112
イメージ
2020-08-04.jpg
/16KB
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-7]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34495 / 親記事)  メジャーバージョンの異なるLog4netライブラリを参照したい
□投稿者/ なおし 一般人(1回)-(2020/07/09(Thu) 09:55:04)
  • アイコン環境/言語:[Windows10, C#, .NET Framework 4.5.2] 
    分類:[.NET] 

    単独で実行可能なWindows Fromsアプリケーションを開発しています。
    開発にあたり、複数のライブラリを利用しているのですが、これらに異なるバージョンのLog4netライブラリを参照するものが含まれています。

    ・参照DLL:AAA.dll が、log4net の 1.2.10.0 を参照する。
    ・参照DLL:BBB.dll が、log4net の 2.0.8.0 を参照する。

    この状況で、新しいバージョンの 2.0.8.0 の log4net を参照して実行すると、

    ----------------
    System.IO.FileLoadException: ファイルまたはアセンブリ 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821'、またはその依存関係の 1 つが読み込めませんでした。見つかったアセンブリのマニフェスト定義はアセンブリ参照に一致しません。 (HRESULT からの例外:0x80131040)
    ファイル名 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821' です。'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821'
    ----------------

    とエラーとなってしまいます。
    ネットで調べて、同じような目に遭っている

    https://www.it-swarm.dev/ja/.net/%E5%90%8C%E3%81%98%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7log4net%E3%81%AE2%E3%81%A4%E3%81%AE%E7%95%B0%E3%81%AA%E3%82%8B%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E5%8F%82%E7%85%A7%E3%81%99%E3%82%8B/969316636/

    を参考に、app.config を以下のように変更したものの、発生するエラーに変化がありません。

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
    <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
    <dependentAssembly>
    <assemblyIdentity name="log4net" publicKeyToken="1b44e1d426115821" culture="neutral" />
    <codeBase version="1.2.10.0" href="log4net.1.2.10/log4net.1.2.10.dll" />
    </dependentAssembly>
    </assemblyBinding>
    </runtime>
    </configuration>

    これらAAA.dll, BBB.dllの何れも、私共の会社で作成しているものではないため、参照先log4netのバージョンを変更してリビルド、ということが難しい状況にあり、苦慮しております。

    何か指定の仕方にあやまりがあるのでしょうか。
    お気づきのことがありましたら、ご指摘いただけると幸いです。
違反を報告
引用返信

▽[全レス4件(ResNo.1-4 表示)]
■34496 / ResNo.1)  Re[1]: メジャーバージョンの異なるLog4netライブラリを参照したい
□投稿者/ 魔界の仮面弁士 大御所(1285回)-(2020/07/09(Thu) 11:59:05)
  • アイコンNo34495に返信(なおしさんの記事)
    > app.config を以下のように変更したものの、

    その定義だと、dependentAssembly 要素が 1 組しかないようですね。
    1.2.10.0 向けと 2.0.8.0 向け用それぞれに
    //dependentAssembly/assemblyIdentity[@name="log4net"]
    のノードを用意してみては如何でしょう。

    https://pie001.hatenablog.com/entry/2016/12/22/100714
    https://www.it-swarm.dev/ja/.net/*/969316636/
違反を報告
引用返信
■34497 / ResNo.2)  Re[2]: メジャーバージョンの異なるLog4netライブラリを参照したい
□投稿者/ Hongliang 大御所(582回)-(2020/07/09(Thu) 13:05:55)
  • アイコンフォルダ構成はちゃんとしていますか?
    Releaseのほうだけlog4net.1.2.10\log4net.1.2.10.dllを配置してて
    Debugで実行してるとかないですか?
違反を報告
引用返信
■34498 / ResNo.3)  Re[3]: メジャーバージョンの異なるLog4netライブラリを参照したい
□投稿者/ なおし 一般人(2回)-(2020/07/10(Fri) 10:58:32)
  • アイコン魔界の仮面弁士様、Hongliang様、コメントくださいましてありがとうございます。
    まずは魔界の仮面弁士様にご指摘くださいました、両方ちゃんと指定したものの、状況変わらず同じエラーが発生しております。
    また、Hongliang様にご指摘くださいました、app.configに指定したパスと、実際のDLLファイルの配置が適切か、についてもあらためて確認しておりました、以下のように適切?に配置している状況となっておりました。

    プロジェクト
    └bin
     └Debug
      ├log4net.1.2.10
      │└log4net.1.2.10.dll
      ├log4net.dll ※v2.0.8.0 のものです。
      ├AAA.dll
      ├BBB.dll
      ├WindowsFormApplication.exe
      ├WindowsFormApplication.exe.config
      └他DLL

    この構成で、app.configの中身は以下となっています。
    (ビルドにより作成されるWindowsFormApplication.exe.configも中身同じです)

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
    <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
    <dependentAssembly>
    <assemblyIdentity name="log4net" culture="neutral" publicKeyToken="669e0ddf0bb1aa2a" />
    <codeBase version="2.0.8.0" href="log4net.dll" />
    <!-- 以下の指定をいれてもダメでした。 -->
    <!-- <bindingRedirect oldVersion="0.0.0.0-2.0.8.0" newVersion="2.0.8.0" /> -->
    </dependentAssembly>
    <dependentAssembly>
    <assemblyIdentity name="log4net" culture="neutral" publicKeyToken="1b44e1d426115821" />
    <codeBase version="1.2.10.0" href="log4net.1.2.10/log4net.1.2.10.dll" />
    </dependentAssembly>
    </assemblyBinding>
    </runtime>
    </configuration>


    実行に際し、VisualStudioからのデバッグ実行だけでなく、上記フォルダ内の「WindowsFormApplication.exe」を直接実行しても同じ結果となっています。

    どうも、app.configの設定を読んでくれているのか、というそもそもの疑問がわいておりまして、
    新しくWindowsFormアプリケーションを最小構成で作成して、リトライしてみます。

    取り急ぎ、お礼と現状報告までとさせてください。
    結果はまたここでご報告させていただきます。

    ありがとうございました。
違反を報告
引用返信
■34508 / ResNo.4)  Re[4]: メジャーバージョンの異なるLog4netライブラリを参照したい
□投稿者/ なおし 一般人(3回)-(2020/07/15(Wed) 17:30:23)
  • アイコン魔界の仮面弁士様、Hongliang様、ご報告が遅くなりましたが、異なるLog4netの
    バージョンを参照するDLLのみで構成したモジュールで色々切り分けたものの、
    app.config に記述するやり方では問題を回避することが出来ませんでした。

    私共のスキルでは回避できないと判断し、AAA.dll と log4net.dll(1.2.10.0)
    を別フォルダに配置し、アプリケーションドメインを別に作りその中で AAA.dll
    を読み込んで、プロキシ経由で AAA.dll の機能を利用することにしました。
    今のところ問題無いようですので、これで進めようと考えています。

    色々とご示唆いただきありがとうございました。
解決み!
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-4]



■記事リスト / ▼下のスレッド / ▲上のスレッド
■34499 / 親記事)  VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ nao 一般人(11回)-(2020/07/13(Mon) 17:33:13)
  • アイコン環境/言語:[VB.NET、.NET Framework2.0] 
    分類:[.NET] 

    VB6.0のプロジェクトをVS2005のコンバート機能を使用して変換したのですが、以下のワーニングが出ています。

    'UPGRADE_WARNING: 構造体 FileTime に、この Declare ステートメントの引数としてマーシャリング属性を渡す必要があります。
    Public Declare Function LocalFileTimeToFileTime Lib "KERNEL32.DLL" (ByRef lpLocalFileTime As FileTime, ByRef lpFileTime As FileTime) As Integer

    なお、FileTime構造体は以下の通りです。

    'FileTime構造体
    Public Structure FileTime
      Dim LowDateTime As Integer
      Dim HighDateTime As Integer
    End Structure

    Declare宣言時に引数の型に構造体を定義するときの属性は何を渡せばよいのでしょうか?
    それとも構造体のメンバの方に属性を追加するのでしょうか?

    ご存知の方がいらっしゃいましたら、ご教示いただけると幸いです。

違反を報告
引用返信

▽[全レス8件(ResNo.4-8 表示)]
■34503 / ResNo.4)  Re[2]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ nao 一般人(14回)-(2020/07/13(Mon) 19:39:19)
  • アイコンNo34502に返信(Hongliangさんの記事)
    > おそらくその警告は、Declare文中にByRefで構造体を渡しているところ全部に自動的に付けられるものかと思います。
    > 提示されているLocalFileTimeToFileTime関数のDeclare文については、特に問題さそうです。
    > (他の関数のDeclare文で出ている箇所がある場合、それが問題ないかは個別の話になります)
    >


    ご回答ありがとうございます。

    問題があるかないかの判断はどのように考えればよろしいのでしょうか?
    他にもいくつか同じワーニングが表示されている場所があります。
    さすがに全部ここで質問するわけにもいきませんので、判断の基準がありましたらご教示いただけませんでしょうか。

違反を報告
引用返信
■34504 / ResNo.5)  Re[3]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ Hongliang 大御所(584回)-(2020/07/13(Mon) 20:04:45)
  • アイコン> 問題があるかないかの判断はどのように考えればよろしいのでしょうか?
    > 他にもいくつか同じワーニングが表示されている場所があります。
    > さすがに全部ここで質問するわけにもいきませんので、判断の基準がありましたらご教示いただけませんでしょうか。

    特に怪しいところ、という意味では、構造体内に配列や文字列型が含まれている部分と言えますが、
    結局はすべてを1つ1つ、構造体の定義も含めたAPI定義を正しくVBに翻訳できているか確認していくことになります。
    https://docs.microsoft.com/ja-jp/dotnet/framework/interop/marshaling-classes-structures-and-unions
    一応公式ドキュメントはこの辺りです。
    // 初心者の方に対して無茶ぶりが過ぎるだろうとは思います。

    結構な数のWindows APIについては、以下のサイトにサンプル定義が載っています。
    https://www.pinvoke.net/
    Declareの代わりに<DllImport>構文だったり、C#による定義しかなかったり、といったものも多いですが。
違反を報告
引用返信
■34505 / ResNo.6)  Re[4]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ nao 一般人(15回)-(2020/07/13(Mon) 20:11:52)
  • アイコンNo34504に返信(Hongliangさんの記事)

    ご回答ありがとうございます。
    ご教示いただいたページを読んでみたいと思います。
    ありがとうございました。
違反を報告
引用返信
■34506 / ResNo.7)  Re[5]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ 魔界の仮面弁士 大御所(1286回)-(2020/07/14(Tue) 05:11:36)
  • アイコン2020/07/14(Tue) 09:09:11 編集(投稿者)

    No34501に返信(naoさんの記事)
    > Option Strict Offになっていますし、

    API を使うなら、できるだけ Option Strict On で動作するようコーディングされることをお奨めします。


    No34499に返信(naoさんの記事)
    > なお、FileTime構造体は以下の通りです。

    実は自前で宣言しなくても、.NET Framework には
    System.Runtime.InteropServices.ComTypes.FILETIME
    という構造体が既に用意されていたりします。


    > 'UPGRADE_WARNING: 構造体 FileTime に、この Declare ステートメントの引数としてマーシャリング属性を渡す必要があります。
    Google ってみたところ、英語版の VS2005 だと、
     'UPGRADE_WARNING: Structure FileTime may require marshalling attributes to be passed as an argument in this Declare statement. Click for more: 'ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?keyword="C429C3A5-5D47-4CD9-8F51-74A1616405DC"'
    になり、VS2003 の場合は、
     'UPGRADE_WARNING: Structure FileTime may require marshalling attributes to be passed as an argument in this Declare statement. Click for more: 'ms-help://MS.VSCC.2003/commoner/redir/redirect.htm?keyword="vbup1050"'
    というメッセージになるらしいです。

    手元に ms-help プロトコルを開ける環境が残っていないので未確認ですが、「Visual Studio 2005」と共に
    「Visual Studio 2005 MSDN Library」をインストールしてあればリンクを開けるかもしれません。
    (リンクを開けたとしても、有益な情報を得られない可能性は高そうですが)


    上記リンクについて、何か情報が無いか探してみたのですが、見つかったのはこれぐらい。
    https://www.mobilize.net/vbtonet/ewis/ewi1050
    それっぽいことが書かれているものの、VB6 なのにユーザー定義型を ByRef ではなく ByVal 渡ししている時点で、資料として不自然ですね。

    あとは下記がヒットしました。
    37 ページ目の「3.5.2 Structure may require Marshalling Attributes to be passed as an Argument in this Declare Statement.」の項。

    今回の LocalFileTimeToFileTime のための有益な情報にはなるかどうかは別として、一応参考までに。
    https://www.cs.kau.se/cs/education/courses/davcdiss/Exjobb_2008/C2008-06.pdf



    > Declare宣言時に引数の型に構造体を定義するときの属性は何を渡せばよいのでしょうか?
    > それとも構造体のメンバの方に属性を追加するのでしょうか?

    Hongliang さんご提示の pinvoke.net は私もたびたび参考にさせてもらっていますが、今回の
    LocalFileTimeToFileTime API の宣言は掲載されていないみたいですね。
    FileTimeToLocalFileTime API の宣言は掲載されているのですけれども。

    すでに示されているように、今回の宣言は、自動変換された宣言のままで動くと思います。
    もしあえて修正するとすれば、In 属性および Out 属性を明示して
     ' Imports System.Runtime.InteropServices
     Public Declare Function LocalFileTimeToFileTime Lib "KERNEL32.DLL" (<[In]> ByRef lpLocalFileTime As FileTime, <Out> ByRef lpFileTime As FileTime) As <MarshalAs(UnmanagedType.Bool)> Boolean
     Public Declare Function FileTimeToLocalFileTime Lib "KERNEL32.DLL" (<[In]> ByRef lpFileTime As FileTime, <Out> ByRef lpLocalFileTime As FileTime) As <MarshalAs(UnmanagedType.Bool)> Boolean
    のようにすると良いのではないでしょうか。
    元の Win32 API の戻り値が「BOOL 型」であるため、上記では戻り値も As Boolean に変更してあります。


    No34503に返信(naoさんの記事)
    >>おそらくその警告は、Declare文中にByRefで構造体を渡しているところ全部に自動的に付けられるものかと思います。
    >>提示されているLocalFileTimeToFileTime関数のDeclare文については、特に問題さそうです。
    > 問題があるかないかの判断はどのように考えればよろしいのでしょうか?

    配列や文字列型以外の注意点として思いつくのは、StructLayout 属性の付与とか。

    例えば SHFILEOPSTRUCT 構造体は、StructLayout 属性で Pack:=1 を指定しておかないと、
    fAnyOperationsAborted 以降のメンバー位置がズレてしまうことになります。

    冗長なので、既定の設定のままで問題が無い場合は、属性指定を省略することも多いですが、
    余裕があれば StructLayout 属性にて、CharSet と Pack、時には Size も明示しておいた方が良いと思います。


    その他、個別判断が必要な例としては、 KB161301 の WindowFromPoint API が挙げられます。

    この API の本来の定義は『HWND WindowFromPoint( POINT Point );』なのですが、VB6 の制限により、
    多くの場合、引数定義を (ByVal xPoint As Long, ByVal yPoint As Long) に置き換えて代用されています。
    また、VBA7 でいうところの As LongPtr 型がまだ使えないので、戻り値が As Long で代用されているわけですが、
    これらそれぞれの「As Long」を、.NET の As Integer と As IntPtr に再翻訳する作業は、
    アップグレード ウィザードの自動変換だけではまかないきれないでしょう。
違反を報告
引用返信
■34507 / ResNo.8)  Re[6]: VB6→2005変換時のDeclare宣言のマーシャリング属性
□投稿者/ nao 一般人(16回)-(2020/07/14(Tue) 19:59:13)
  • アイコンNo34506に返信(魔界の仮面弁士さんの記事)
    > 2020/07/14(Tue) 09:09:11 編集(投稿者)
    ご回答ありがとうございます。

    色々調べてくださって、ありがとうございます。

    やはり特定の判断基準はないのですね。
    ご教示いただいたページを見ながら修正を検討してみます。
    ありがとうございました。

違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-8]



■記事リスト / ▲上のスレッド
■34493 / 親記事)  GROUPBOXの複製について(vb.net)
□投稿者/ 北松 一般人(1回)-(2020/06/29(Mon) 11:44:40)
  • アイコン環境/言語:[vb.net] 
    分類:[.NET] 

    VB.NETでプログラミング中です。

    WindowsFormにて、
    Form1内にGroupBox1を作成し、
    GroupBox1内に複数のLabelやTextBoxを配置しています。
    TextBoxには住所や氏名を入力し、
    Botton1クリックイベントでデータベースにレコードを登録します。

    【ここからやりたいこと】
    Botton2クリックイベントにてGroupBox1を複製し、真下にGroupBox2を作成し
    たい。
    作成されたGroupBox2内のTextBoxはすべてブランク。
    Botton2クリックイベントのたび、GroupBox3、GroupBox4と追加する。
    GroupBox1とGroupBox2にそれぞれ情報を入力し、別レコードとしてデータベー
    スに登録する。
    【ここまでやりたいこと】

    上記処理は可能でしょうか?
    可能な場合、サンプル等ご教授いただければ幸いです。

    不可の場合、代替手段があれば教えてください。

    よろしくお願いします。
違反を報告
引用返信

▽[全レス1件(ResNo.1-1 表示)]
■34494 / ResNo.1)  【報告】No34493 の投稿はマルチポストです
□投稿者/ (報告) 大御所(274回)-(2020/06/29(Mon) 16:28:29)
  • アイコンNo34493 の投稿はマルチポストです。もし元記事の投稿者にマルチポストの心当たりがない場合は、すぐに返信でお知らせください。

    ●マルチポストされている場所
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=95177

    ----------
    この掲示板ではマルチポストが禁止されています。詳しくは、「書き込みのルールについて」をお読みください。

    ●書き込みのルールについて
    https://dobon.net/vb/bbs/index.html
違反を報告
引用返信

■記事リスト / レス記事表示 → [親記事-1]






Mode/  Pass/


- Child Tree -

2021/04/20(Tue) 23:44:48 に作成されたキャッシュを表示しています。
生のデータを表示する | キャッシュを最新にする