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

■34604 / 親記事)  C#をVBに変換した際の強制的な参照渡し
  
□投稿者/ tomichan 一般人(1回)-(2021/01/01(Fri) 16:36:16)
  • アイコン環境/言語:[Win10,VB.NET,.NET4.0] 
    分類:[.NET] 

    お世話になります

    ポータブルデバイス(WPD)を利用して、デバイスの一覧と MTPファイルの読込と書込みをしたくて、
    いろいろ探し回った結果、こちらのC#コードを参考にVBに書き起こしています。
    (https://www.ipentec.com/document/csharp-wpd-programming-overview)

    そこでC#のコードは
    private void Form1_Load(object sender, EventArgs e)
    {
    deviceManager = new PortableDeviceManager();
    deviceManager.RefreshDeviceList();
    uint count = 0;
    deviceManager.GetDevices(null, ref count); ← この部分
    textBox1.Text += "WPDデバイスの数:" + count.ToString() + "\r\n";
    ...............
    となっているものをVBの変換コードとして
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    deviceManager = New PortableDeviceManager
    deviceManager.RefreshDeviceList()
    Dim count As UInteger = 0
    deviceManager.GetPrivateDevices(Nothing, count)
    TextBox1.Text += "WPDデバイスの数:" + count.ToString() + vbCrLf
    .............
    と記述しました。

    C#でデバックしたところ、問題なくcountが取得できるのですが、VBでは取得することができません。
    C#で作ればよいのですが、既存のVBで起こしたプログラムを改良したく、かつVBが好きなので、
    何とかしようといろいろ探し回って、原因は引数の参照渡しに関して、C#のref、outのように
    「VB側で引数を明示的に参照渡しにすることで解決できるのでは」
    と思い苦悶していましたが自己解決できずに投稿させていただきました。

    当方の環境は 
    OSはWin10 Home64bit、VS2019(Version 16.8.3)、フレームワークは.net4.0、OptionStrictはOffの状態です。

    最終的にやりたいことは、スマホやデジカメ等のPCに接続したポータブルデバイスからのファイルのやり取りです。
    他の方法を含め、皆様のお力をお借りしたく、ご指導いただけますよう、よろしくお願いします。


マルチポストを報告
違反を報告
引用返信 削除キー/
■34605 / ResNo.1)  Re[1]: C#をVBに変換した際の強制的な参照渡し
□投稿者/ Hongliang 大御所(593回)-(2021/01/01(Fri) 17:41:26)
  • アイコン> 何とかしようといろいろ探し回って、原因は引数の参照渡しに関して、C#のref、outのように
    > 「VB側で引数を明示的に参照渡しにすることで解決できるのでは」
    > と思い苦悶していましたが自己解決できずに投稿させていただきました。

    そんな方法はない(はず)ですし、そうする意味もなく参照渡しされます。
    C#で呼び出しにrefが必要ということは、そのメソッド引数のシグネチャはVBからはByRefに見えるので。

    > deviceManager.GetDevices(null, ref count); ← この部分
    > deviceManager.GetPrivateDevices(Nothing, count)

    呼び出してるメソッドが違うように見えますが?
違反を報告
引用返信 削除キー/
■34606 / ResNo.2)  Re[2]: C#をVBに変換した際の強制的な参照渡し
□投稿者/ tomichan 一般人(2回)-(2021/01/01(Fri) 18:24:19)
  • アイコンNo34605に返信(Hongliangさんの記事)
    >>何とかしようといろいろ探し回って、原因は引数の参照渡しに関して、C#のref、outのように
    >>「VB側で引数を明示的に参照渡しにすることで解決できるのでは」
    >>と思い苦悶していましたが自己解決できずに投稿させていただきました。
    >
    > そんな方法はない(はず)ですし、そうする意味もなく参照渡しされます。
    > C#で呼び出しにrefが必要ということは、そのメソッド引数のシグネチャはVBからはByRefに見えるので。
    >
    >> deviceManager.GetDevices(null, ref count); ← この部分
    >> deviceManager.GetPrivateDevices(Nothing, count)
    >
    > 呼び出してるメソッドが違うように見えますが?

    Hongliangさん ありがとうございました。
    私の根本的な間違えでした。
    C#の翻訳だけに気を取られていて、一番大事な確認作業を怠り、
    一人で翻訳完了したと思い込んで苦悶を続けていました。
    ご指摘通り、メゾットの問題でした。
    今回はご指摘ありがとうございます。
解決み!
違反を報告
引用返信 削除キー/



スレッド内ページ移動 / << 0 >>

このスレッドに書きこむ

Mode/  Pass/


- Child Tree -