读书人

代码动态编译的一些有关问题

发布时间: 2012-12-26 14:39:29 作者: rapoo

代码动态编译的一些问题
各位大虾,小弟最近要使用动态编译生成exe程序,可是发现生成的exe是控制台程序而不是windows窗体应用程序(有用户交互界面的),这样有些用户交互功能无法实现(比如说显示一个窗体等),不知道哪里可以设置生成的应用程序类型的?



Public Shared Sub CreateExe(ByVal exeName As String, ByVal Code As String)
'创建一个编译器.
Dim Comp As VBCodeProvider = New VBCodeProvider()
Dim Parms As CompilerParameters = New CompilerParameters
Parms.GenerateExecutable = True '创建exe文件而不是dll
Parms.OutputAssembly = exeName '产生的应用程序名
Parms.TreatWarningsAsErrors = False'编译器将不会将警告视为错误。
'添加你想引用的所有集合。
Parms.ReferencedAssemblies.Add("System.Windows.Forms.dll")
Parms.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll")
Parms.ReferencedAssemblies.Add("System.dll")
Parms.ReferencedAssemblies.Add("mscorlib.dll")
'定义你要运行的代码。
Dim Executable As CompilerResults = Comp.CompileAssemblyFromSource(Parms, Code)
'如果再有任何错误消息显示。
If Executable.Errors.HasErrors Then
For Each Item As CompilerError In Executable.Errors()
MessageBox.Show(Item.ErrorText)
Next
Else '如果再没有任何错误信息,启动可执行文件。
Process.Start(exeName)
End If
End Sub



这样生成的是控制台程序,如果在Code里面dim frm as new form,dim timer1 as new timer等,用不了。
请问该如何解决?
[最优解释]
这和是否是Console没有关系,关键看你是否用 Application.Run(new Form1()) 启动了窗体。
[其他解释]
引用:
这和是否是Console没有关系,关键看你是否用 Application.Run(new Form1()) 启动了窗体。


如果我Code字符串里的代码如下,那么 Application.Run该用在哪里呢?


Imports System.Windows.Forms
Imports Microsoft.VisualBasic
Imports System
Imports System.Diagnostics

Public Class C_Text

Private Shared Timer As New Timer
Private Shared TimerInterval As Integer = 5000

Public Shared Sub Main()
AddHandler Timer.Tick, AddressOf Timer_Tick
Timer.Interval = TimerInterval
Timer.Start()


End Sub

Private Shared Sub Timer_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
'这里是timer的tick事件,具体代码就不写了
End Sub

End Class



能不能简单的写一下代码?十分感谢!

[其他解释]
Main 里
[其他解释]
fangxinggood您好,我今天按您的提示修改了一下Code代码,如下,可是还是不行(还是黑框一闪就没了)。

Imports System
Imports System.Windows.Forms
Imports Microsoft.VisualBasic

Namespace Text

Public Class C_Text

Public Shared Sub Main()
Application.Run(New MainFrm)
End Sub

End Class

Public Class MainFrm

Inherits Windows.Forms.Form

Private Shared Button1 As Button

Public Sub New()
Button1.Text = "Text"
Button1.Top = 100 : Button1.Left = 100
AddHandler Button1.Click, AddressOf Button1_Click
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
MsgBox("Text")
End Sub

End Class

End Namespace


这样应该没错了吧?可是窗体还是无法显示,请问哪里出错了?

读书人网 >VB Dotnet

热点推荐