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

「一致する引数に戻してコピーする..」の警告について

環境/言語:[.net Framework2.0]
分類:[.NET]

言語:vb.net2005
OS :WindowsXP
Office2003

ビルドした結果、下記の@で警告が表示されたのですが、
どう修正していいかわかりません。
どなたかご教授願います。

[コード]
Private Sub Main()
Dim xlapp As Microsoft.Office.Interop.Excel.Application = Nothing
clearComObject(xlapp) →@
End Sub

Private Sub clearComObject(ByRef objCom As Object)
' 処理省略
End Sub

[警告内容]
「'ByRef' パラメータ'objCom'の値を、一致する引数に戻してコピーする際の'Object'から'MicrosoftOfficeInterop,Excel.Application'への暗黙的な変換です。
■No22093に返信(ゆうさんの記事)

> [警告内容]
> 「'ByRef' パラメータ'objCom'の値を、一致する引数に戻してコピーする際の'Object'から'MicrosoftOfficeInterop,Excel.Application'への暗黙的な変換です。

http://msdn.microsoft.com/ja-jp/library/c84t73c2(VS.80).aspx
http://homepage1.nifty.com/CavalierLab/lab/vb/byvalbyref.html
この辺りを読んで理解できれば解決するかもです。
■No22093に返信(ゆうさんの記事)
> Private Sub clearComObject(ByRef objCom As Object)
> ' 処理省略
> End Sub

ByVal では駄目なのでしょうか?
ByRef だと、Option Strict On の時に使いにくそうですけれども。

で、どうしても ByRef が必要であるというなら、
 Sub ClearComObject(Of T)(ByRef x As T)
にしてしまえば、警告は出ないハズ。


メソッド名から想定される処理も含めると、こんな感じかな…。

Private Sub ClearComObject(Of T)(ByRef objCom As T)
 If objCom Is Nothing Then Throw New ArgumentNullException()
 If Not Marshal.IsComObject(objCom) Then Throw New ArgumentOutOfRangeException()
 Marshal.ReleaseComObject(objCom)
 objCom = Nothing
End Sub
■No22095に返信(魔界の仮面弁士さんの記事)
> ■No22093に返信(ゆうさんの記事)
>>Private Sub clearComObject(ByRef objCom As Object)
>>' 処理省略
>>End Sub
>
> ByVal では駄目なのでしょうか?
> ByRef だと、Option Strict On の時に使いにくそうですけれども。
>
> で、どうしても ByRef が必要であるというなら、
>  Sub ClearComObject(Of T)(ByRef x As T)
> にしてしまえば、警告は出ないハズ。
>
>
> メソッド名から想定される処理も含めると、こんな感じかな…。
>
> Private Sub ClearComObject(Of T)(ByRef objCom As T)
>  If objCom Is Nothing Then Throw New ArgumentNullException()
>  If Not Marshal.IsComObject(objCom) Then Throw New ArgumentOutOfRangeException()
>  Marshal.ReleaseComObject(objCom)
>  objCom = Nothing
> End Sub

ありがとうございました。
byvalで解決しました。
解決済み!

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