C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.83366 の関連記事表示

<< 0 >>
■83366  Re[5]: これらの引数で呼び出されるアクセス可能なNewがないため・・
□投稿者/ 魔界の仮面弁士 -(2017/03/19(Sun) 15:06:10)
    No83365 (惹起 さん) に返信
    > MultiProgram_run = New Thread(AddressOf Program_runxx) With {.IsBackground = True}
    > MultiProgram_run.Start(hiki)
    先ほどと同様に
     Dim t As New Thread(Sub() Program_runxx(hiki)) With {.IsBackground = True}
     t.Start()
    では駄目ということでしょうか。もしも ThreadStart デリゲートでは都合が悪いのなら、
    素直に ParameterizedThreadStart デリゲートで受け渡すのが妥当かと思います。


    > それとCallByName メソッドというのは何でしょうか?
    > これを使ったWshShell オブジェクトの呼び出し方をできれば教えていただけないでしょうか?
    使用例はヘルプに書かれていますので、それを WshShell オブジェクトに適用してみてください。
    全く分からないのであれば、CreateObject でレイトバインド呼び出しにしたりせず、
    "Windows Script Host Object Model" を参照設定した上で、素直にアーリーバインドで呼ぶべきかと。

    ただし先ほども書きましたが、そもそも VB.NET から WshShell を呼ぶことはお奨めしません。
    パフォーマンスも悪いですし、呼び出しの手間もかかるだけでメリットがありません。
    マルチスレッド環境からの利用を想定しているのであれば尚の事。
    (WshShell は Single Thread Apartment モデルのコンポーネントです)


    一応、WshShell によるデスクトップパスの取得コードも書いておきますが、
    素直に .NET Framework の標準機能で取得するべきかと思いますよ。


    ===== .NET Framework でデスクトップのパスを取得するための標準的なコード =====
    Dim desktopFolderPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)


    ===== VB ランタイムを用いてデスクトップのパスを取得するためのコード =====
    Dim desktopFolderPath As String = My.Computer.FileSystem.SpecialDirectories.Desktop



    ===== WshShell を参照設定してデスクトップのパスを取得するコード =====
    '要 COM 参照設定 [Windows Script Host Object Model]
    Dim wshShell As New IWshRuntimeLibrary.WshShell()
    Dim wshFolders As IWshRuntimeLibrary.IWshCollection = wshShell.SpecialFolders
    Dim targetName As Object = "Desktop"

    Dim desktopFolderPath As String = DirectCast(wshFolders.Item(targetName), String)

    'COM コンポーネントの解放処理
    System.Runtime.InteropServices.Marshal.ReleaseComObject(wshFolders)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(wshShell)


    ===== CallByName 経由の呼び出しにて WshShell からデスクトップのパスを取得するコード =====
    Dim wshShell As Object = CreateObject("WScript.Shell")
    Dim wshFolders As Object = CallByName(wshShell, "SpecialFolders", CallType.Get)

    Dim desktopFolderPath As String = DirectCast(CallByName(wshFolders, "[DispId=0]", CallType.Get, "Desktop"), String)

    'COM コンポーネントの解放処理
    System.Runtime.InteropServices.Marshal.ReleaseComObject(wshFolders)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(wshShell)
記事No.83350 のレス /過去ログ142より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -