2009-09-01 9 views
-2

私はいくつかのコードを持っており、実行時にクラッシュしますが、何が間違っているようですか?コードがクラッシュする(VB.NET)

Imports WMEncoderLib 
Imports WMPREVIEWLib 

Imports System.IO 
Public Class Form1 
    Inherits System.Windows.Forms.Form 

#Region " Windows Form Designer generated code " 

    Public Sub New() 
     MyBase.New() 

     ''//This call is required by the Windows Form Designer. 
     InitializeComponent() 

     ''//Add any initialization after the InitializeComponent() call 

    End Sub 

    ''//Form overrides dispose to clean up the component list. 
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) 
     If disposing Then 
      If Not (components Is Nothing) Then 
       components.Dispose() 
      End If 
     End If 
     MyBase.Dispose(disposing) 
    End Sub 

    ''//Required by the Windows Form Designer 
    Private components As System.ComponentModel.IContainer 

    ''//NOTE: The following procedure is required by the Windows Form Designer 
    ''//It can be modified using the Windows Form Designer. 
    ''//Do not modify it using the code editor. 
    Friend WithEvents Button1 As System.Windows.Forms.Button 
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() 
     Me.Button1 = New System.Windows.Forms.Button 
     Me.SuspendLayout() 
     ''// 
     ''//Button1 
     ''// 
     Me.Button1.Location = New System.Drawing.Point(48, 80) 
     Me.Button1.Name = "Button1" 
     Me.Button1.Size = New System.Drawing.Size(216, 23) 
     Me.Button1.TabIndex = 1 
     Me.Button1.Text = "Write To file and Close application" 
     ''// 
     ''//Form1 
     ''// 
     Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) 
     Me.ClientSize = New System.Drawing.Size(292, 266) 
     Me.Controls.Add(Me.Button1) 
     Me.Name = "Form1" 
     Me.Text = "Form1" 
     Me.ResumeLayout(False) 

    End Sub 

#End Region 
    Dim Encoder As WMEncoder 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     ''// Create a WMEncoder object. 

     Encoder = New WMEncoder 
     ''// Retrieve the source group collection and add a source group. 

     Dim SrcGrp As IWMEncSourceGroup2 
     Dim SrcGrpColl As IWMEncSourceGroupCollection 
     SrcGrpColl = Encoder.SourceGroupCollection 
     SrcGrp = SrcGrpColl.Add("SG_1") 

     ''// Add a video and audio source to the source group. 
     Dim SrcVid As IWMEncVideoSource2 
     Dim SrcAud As IWMEncAudioSource 
     SrcVid = SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO) 
     SrcAud = SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO) 

     ''// Identify the source files to encode. 
     SrcVid.SetInput("ScreenCap://ScreenCapture1") 
     SrcAud.SetInput("Device://Default_Audio_Device") 

     ''// Choose a profile from the collection. 
     Dim ProColl As IWMEncProfileCollection 
     Dim Pro As IWMEncProfile 
     Dim i As Integer 
     Dim lLength As Long 

     ProColl = Encoder.ProfileCollection 
     lLength = ProColl.Count 
     ''//For i = 0 To lLength - 1 
     ''// Console.WriteLine(ProColl.Item(i).Name) 
     ''//Next 
     For i = 0 To lLength - 1 
      Pro = ProColl.Item(i) 
      If Pro.Name = "Windows Media Video 8 for Local Area Network (384 Kbps)" Then 
       SrcGrp.Profile = Pro 
       Exit For 
      End If 
     Next 

     ''// Fill in the description object members. 
     Dim Descr As IWMEncDisplayInfo 
     Descr = Encoder.DisplayInfo 
     Descr.Author = "Armoghan Asif" 
     Descr.Copyright = "Copyright information" 
     Descr.Description = "Text description of encoded content" 
     Descr.Rating = "Rating information" 
     Descr.Title = "Title of encoded content" 

     ''// Add an attribute to the collection. 
     Dim Attr As IWMEncAttributes 
     Attr = Encoder.Attributes 
     Attr.Add("URL", "www.adnare.com") 

     ''// Specify a file object in which to save encoded content. 
     Dim File As IWMEncFile 
     File = Encoder.File 
     File.LocalFileName = "C:\OutputFile.avi" 

     ''// Crop 2 pixels from each edge of the video image. 
     SrcVid.CroppingBottomMargin = 2 
     SrcVid.CroppingTopMargin = 2 
     SrcVid.CroppingLeftMargin = 2 
     SrcVid.CroppingRightMargin = 2 

     ''// Start the encoding process. 
     Encoder.Start() 

    End Sub 


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     If Encoder.RunState Then 
      Encoder.Stop() 
      Application.Exit() 
     End If 
    End Sub 
End Class 

は、できるだけ早くそれがクラッシュし始めると、私はそれ

おかげ

+0

少なくとも、問題の原因となる数行のコードに分けてください。 –

+0

どこがクラッシュしますか?コードをステップ実行し、どの行とエラーメッセージを見つける – benPearce

+0

ここからエラーメッセージが表示されません。おそらくあなたはそれを私たちに伝えることができますか? – RBarryYoung

答えて

3

通常、あなたの参照が古いか、お使いのOSに適していないためです。だから多分あなたは64ビットVistaにあり、参照されるDLLは16ビットですか?そんなこと。

1

は文字通り、このコードがクラッシュした理由を百の理由が考えられ得ることはありません。

最初に、このWindows Mediaエンコーダーのジョブの起動からアプリケーションの起動を切り離すために、これをForm_Loadイベントからフォームまたは何かのボタンで実行するように変更することを検討してください。

次に、コード全体にブレークポイントを設定し、コードがどのくらい離れているかを調べます。また、「クラッシュ」と言えば、それはどういう意味ですか? Windows Media Converterや他の一般的なDirectXコンポーネントでエラーが発生した場合は、通常、エラー番号/コードが関連付けられています。間違いはありますか?

最後に、あなたのコードは実際にに達していますか?Encoder.Start()

+0

私がデバッグを開始すると、vshostがクラッシュするので、実際には回線を提供できません – jmasterx

+0

Debug.Printステートメントをコードに追加するだけで、どれくらいの距離が得られるかが明確になります。あなたがソリューションのために働くことを望んでいるなら、間違っている行を見つけ出すということはいつもあります –