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

VBのガベージコレクトについて質問

環境/言語:[VB.net VisualBasic2008 .netflamework2.0]
分類:[.NET]

初投稿でいきなり質問ですまんすm−−m
Option Strict Off
Option Explicit On
Friend Class Form1
Inherits System.Windows.Forms.Form

Private Sub cmdDelete_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdDelete.Click
Me.Close()
End Sub

Private Sub Form1_FormClosed(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
'UPGRADE_NOTE: オブジェクト Form1 をガベージ コレクトするまでこのオブジェクトを破棄することはできません。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6E35BFF6-CD74-4B09-9689-3E1A43DF8969"' をクリックしてください。
Me = Nothing
Call SelfDelete()
End Sub


End Class
どこかのサイトで確かフリーで配られていた自己消滅(プログラム自爆)の
為のコードなのですがVB6用の物をそのままVB2008(Vb.net)にぶち込んで見たものです
わからないところがいくつかあるのですが要点を絞ると
1,ガベージコレクト(ガベージコレクション?)はメモリ不足でPCが正常な動作ができなくなる状態?を未然に防ぐ機能という風に解釈したのですがなぜ自爆コードに組み込むのか?どういう仕組みで動かすのかがかなりわかりません
2、エラーがでてましてMEは代入式にすることができないとありまして確かに授業でそんなこといってたかなぁとあいまいに思い出している途中です。ガベージコレクト云々が解決したらなんとか動かせるのでしょうか?自分的に無理かと思っています
3、自分が解読(初心者以前)してみると最初の文はまったくわからないのでわかる部分を読んでいくといったんフォームを閉じてから・・・・・ああ たったの2文の段階で気づくべきだったもう2つプログラムがある

AssemblyInfo.vbの内容

Imports System.Reflection
Imports System.Runtime.CompilerServices
Imports System.Runtime.InteropServices

' アセンブリの一般情報は、以下の属性セットを
' とおして管理されます。アセンブリに関連付けられた情報を変更するには、
' これらの属性値を変更してください。


' TODO: アセンブリ属性の値を確認します。


<Assembly: AssemblyTitle("")>
<Assembly: AssemblyDescription("")>
<Assembly: AssemblyCompany("m-take")>
<Assembly: AssemblyProduct("")>
<Assembly: AssemblyCopyright("m-take")>
<Assembly: AssemblyTrademark("")>
<Assembly: AssemblyCulture("")>

' アセンブリのバージョン情報は、以下の 4 つの値で構成されています:

' メジャー バージョン
' マイナ バージョン
' ビルド番号
' リビジョン

' すべての値を指定するか、下のように '*' を使ってリビジョンおよびビルド番号を
' 既定値にすることができます:

<Assembly: AssemblyVersion("1.0.*")>

はいるかな・・・
■No26954に返信(頭我悪蔵さんの記事)

2つめのプログラム

ModSelfDelete.vbの内容

Option Strict Off
Option Explicit On
Module ModSelfDelete
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA"(ByVal hwnd As Integer, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Integer) As Integer
Private Declare Function GetShortPathName Lib "kernel32.dll" Alias "GetShortPathNameA"(ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Integer) As Integer

Private Function FixPath(ByRef lpPath As String) As String
If Right(lpPath, 1) = "\" Then FixPath = lpPath : Exit Function Else FixPath = lpPath & "\"
End Function

Private Function GetFileName(ByRef lpPath As String) As String
Dim x As Short
Dim e_pos As Short
For x = 1 To Len(lpPath)
If Mid(lpPath, x, 1) = "\" Then e_pos = x
Next x
x = 0
GetFileName = LTrim(Mid(lpPath, e_pos + 1, Len(lpPath)))
End Function

Private Function GetSortFileName(ByRef lpFile As String) As String
Dim iRet As Integer
Dim sPath As String
sPath = Space(260)
iRet = GetShortPathName(lpFile, sPath, 260)
GetSortFileName = Left(sPath, iRet)
sPath = ""
End Function

Public Sub SelfDelete()
Dim absFile As String
Dim sGetFile As String
Dim fp As Integer
Dim hwnd As Integer
'Dim apFile As String
'absFile = GetSortFileName(FixPath(App.Path) & App.EXEName & ".exe")
'UPGRADE_WARNING: App プロパティ App.EXEName には新しい動作が含まれます。 詳細については、'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6BA9B8D2-2A32-4B6E-8D36-44949974A5B4"' をクリックしてください。
absFile = FixPath(My.Application.Info.DirectoryPath) & My.Application.Info.AssemblyName & ".exe"
sGetFile = GetFileName(absFile)
fp = FreeFile
FileOpen(fp, FixPath(My.Application.Info.DirectoryPath) & "del.bat", OpenMode.Output)
PrintLine(fp, "@ECHO OFF")
PrintLine(fp, "attrib -s -h -r -a")
PrintLine(fp, "try:")
PrintLine(fp, "del " & sGetFile)
PrintLine(fp, "if exist " & sGetFile & " goto Try")
PrintLine(fp, "del del.bat")
PrintLine(fp, "exit")
FileClose(fp)
ShellExecute(hwnd, "open", FixPath(My.Application.Info.DirectoryPath) & "del.bat", vbNullString, vbNullString, 0)
sGetFile = ""
'apFile = ""
End Sub
End Module
すいません かなりの長文です
先ほどの1、2、3、の質問は忘れてくださいm−−m
聞きたいことはひとつです
どんな風に動こうとしているのか簡単に教えてくださいm−−m

一番目のコードはフォームにかかれていました
■No26955に返信(頭我悪蔵さんの記事)
とりあえず ルール違反とかだったら指摘してください
解決済みにするか 即座に消すかします

1時間後また見にきます
■No26956に返信(頭我悪蔵さんの記事)
だめだ ぐだぐだだ
一度 解決済みにしてから
またたてます
すいませんでしたm−−m
解決済み!

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