Compiling And Running Code Dynamically / Exposing Objects From App
Jul 19, 2011
I am trying to add some scripting to my VB.NET 2010 Windows Forms Application.I have figured out how to compile and execute VB.NET code stored in an external script file from within my app using Microsoft.VisualBasic.VBCodeProvider.CompileAssemblyFromSource and InvokeMember. I can also pass and return parameters to the code in the script file.In VB6 using the VBScript Host control, I could expose instances of objects in my app to the code in the VBScript.How do I do this in VB.NET?I'd like to expose a form object (the main form for my Windows Forms Application) to my VB.NET script.I don't want to pass the form as a parameter via InvokeMember.[code]
I'm not sure I understand the point of CompilerParameters.ReferencedAssemblies. I thought they could be used in place of using Imports statements.I'm obviously wrong because even if I set CompilerParameters.ReferencedAssemblies.AddRange( {"System.dll", "Microsoft.VisualBasic.dll"}) I still need to use Imports System and Imports Microsoft.VisualBasic in the script for it to work.
Are the Imports used only so that I can use MsgBox() instead of Microsoft.VisualBasic.MsgBox()?What if my script "Imports Something.OrAnother" from an assembly called Something.OrAnother.dll. Do I need to scan the script looking for all of the Imports statements and then add them (plus ".dll") to the CompilerParameters.ReferencedAssemblies before compiling?
I am using CompilerParameters to dynamically compile code... The problem is when I use: cp.ReferencedAssemblies.Add(CompilerPath & "est.exe") to add a reference to test exe ... (where CompilerPath is the full path name) Compiler Path is not the Compiler Application Path
I get an error when compiling stating that: vb "Could not load file or assembly 'test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified." If I put it in the test.dll in the "compiler apps" path and then call ReferencedAssemblies.Add with the full path it works.
I have been compiling applications from my main program using the following code [code]It works fine for building console applications but I want to add a resource into it. However I get Resources Is not a member of My. in my app cause it is a console app and can't have that property etc.
When I dynamically compile SilverLight 4.0 application using Microsoft.VisualBasic.VBCodeProvider, I get the following error.
Line: 118 ErrorCode: BC30002 Error: Type 'System.ComponentModel.Design.HelpKeyword' is not defined. Line: 130 ErrorCode: BC30002 Error: Type 'System.ComponentModel.Design.HelpKeyword' is not defined. Line: 141 ErrorCode: BC30002 Error: Type 'System.ComponentModel.Design.HelpKeyword' is not defined. Line: 234 ErrorCode: BC30002 Error: Type 'System.ComponentModel.Design.HelpKeyword' is not defined.
I can usually find the answers to most of my questions via the Google Gods, but not this time.I have a form that has a TabPageControl and on that page a collection of labels and text boxes via a usercontrol.
On the form I have a button that allows the user to create a new tabpage, when the code adds a new page, it automatically adds the UserControl collection. I can't get my head around how to access the objects on the newly created tabpage.
What I need to be able todo is take the index of the tabpage that has focus and translate that against the UerContol name, but I havn't a clue how to do it!
After reading a couple of tutorials, it seems that basically NET works quite like java. All the IDE's produce an intermediate code that I have to distribute, and which NET compiles at runtime to machine code and then executes it. Leaving aside the question why so when NET works only on Windows platforms, I have some other more practical questions:Is it possible to directly compile to machine code targeted at specific platform like XP 32-bit or Win7 64-bit?
Is one able to compile VB 6 code in Visual Studio.NET ? In other words, is it backwards compatible with older VB code?Since I know there is a difference between managed code (.NET) and unmanaged code, I am wondering if Visual Studio.NET is able to compile unmanaged code as well?
I always make back ups of my projects in case I'll really really mess up on the way and want to go back to more stable version. I've tried running one of my back ups few days ago and ended up with importing pfx key canceled. What exactly is pfx key? And what do I do to have my code compiled?
I've been using this article [URL]to add into my code the ability to compile code a user enters into a text box. I was wondering if anyone knows a way that I can pass in a variable that exists in yhe program that I have written. So the idea is in my program I have a variable, let's say a filename, that is used. The user of my program is writing their own program in a text box. When I compile the program they have written I want to be able to pass the filename from my program into theirs.
I have an .exe file in C++ (gunmake.exe).And... Check it out:
Dim dirNow As String = Directory.GetCurrentDirectory() Dim dirFile As String = dirNow & "systemgunmake.exe" FileCopy(dirFile, "C:GunMake2sharpgunmake.exe")
That's what I'm doing to work with my .exe in VB.net.Is there a way to put my .exe into VB.net code?I say. All in one .exe by VB.net?No need to use the two files. :X
I wanted to provide programming support for an application I made. So I used System.CodeDom compiler and it allows me to execute vb.net code on the fly.The way it works is :
- I call the engine and pass references and code that it needs to run - The code is able to access public subs - results are obtained after processing completes.
[code]I want that if the code is being executed by user on seperate threads at the same time then their values should be independant. Right now this is not possible as module has been used and not classes.What I want is -> create object of class RunCode, it runs user code and returns. Thus the age variable in class runcode is not tampered with if at the same time another code is executed. But for that module module1 has to be a class also and how can user call Age sub if its a class. I mean user should be able to call all subs/functions by name and it should work like it was working right now.
i have written a c program for calculating some financial task It accepts the input file name or path name from the user processes it and displays the output in 6 output files. i want to execute the same c -source code using visual basic .net.I want to know how to compile the c source code and execute it .
I would like to know how I could generate code from a text file in a particular format into a VB.net or C# source file.I would like my code generating program to read text file having the following format:[code]The idea is to compile the main code after the user have modified the txt file and used the code generating program. I would prefer to write the code generating program in C, python or C#.
I did a search for "How do I implement Serial COM Port communications? and found a response by Xiaoyun Li which was last posted on April 10, 2009. Xiaoyun's response included sample code. My intent has been to get a clean compile on the sample code, then test it, then expand the code into a real application. I am down to a single error message, which I can't figure out how to resolve: "Method 'Public Sub DoUpdate()' does not have a signature compatible with delegate 'Delegate Sub EventHandler(sender As Object, e As System.EventArgs)'." [code]I marked where the error occurs in the code with *** to the right of the error line.The code is attached to a simple form, Form1 which contains a single text box, TextBox1.It appears to me that the code needs a Delegate statement, but I can't figure out how to code it or where to put it.d.
Is there a way to dynamically create an object using a string as the class name?I've been off VB for several years now, but to solve a problem in another language, I'm forced to develop a wrapper in this one. I have a factory method to dynamically create and return an object of a type based on input from elsewhere. The provided input is meant to be the class name from which to create an object from. Normal syntax means that the entire class has to be explicitly spelled out. To do it this way, there could literally be hundreds of if/then's or cases to handle all the available class/object choices within the referenced libs:
If c_name = "Button" then obj = new System.Windows.Forms.Button If c_name = "Form" then obj = new System.Windows.Forms.Form ....
I would like to dynamically create an object (in my case a thread) and then be able reference that object. Simplistically put, I would like to read from a text file and then process each item using a thread (so that I don't have to wait for each item before starting the next). The problem is that I cannot think of a way to create a new thread dynamically ie. thread name so that I can then wait for all created threads before doing something else.
Is there a way to dynamically create an object at runtime?Background: Basically i have an employee class that i want to instantiate every time an employee logs in. What i don't want it to have an employee object already created for every employee, but when they log in the object gets created.
Trying to dynamically add Alien objects (Picture boxes) to my game form. The picture boxes are invisible when I run the game. All of the other controls for the picture box seen to work just fine. Movement, Alien Shots ,etc, etc. [code]
I need to let the end user move and resize objects (like a textbox or button). There are several examples that demonstrate this in VB, but not in VB Express 2008, based upon VB.net.It looks like earlier you needed to access Windows API, but these calls does not work in VB.net. I understand that these call are replaced by "native" .net calls, but I cannot find any that does the job.
A typial example from old VB is:
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
I'm creating a certain number of objects based on some templates that I have available to the user. Then, I have a module created for each template where I will be doing some math operations, etc.
I know how many objects will be created, but of course visual studio doesn't at design time.
Dim newhydzone As PictureBox newhydzone = New PictureBox newhydzone.Name = "Zone" & Form1.hydzonecount
Access objects on a dynamically created UserControl an a dynamically created tab page. I can usually find the answers to most of my questions via the Google Gods, but not this time. I hope the collective that is StackOverFlow can help! I have a form that has a TabPageControl and on that page a collection of labels and text boxes via a usercontrol.
On the form I have a button that allows the user to create a new tabpage, when the code adds a new page, it automatically adds the UserControl collection, all good so far. I can't get my head around how to access the objects on the newly created tabpage. What I need to be able todo is take the index of the tabpage that has focus and translate that against the UerContol name, but I havn't a clue how to do it! [Code]
I dynamically (by programming text, not drawing in GUI) created a matrix of 10x10 buttons named 'Button1' till 'Button100'. In a formula I calculate a number, say '87'. If I next want to reference 'Button87' and change e.g. the background clolor and text properties, how would I do that? I am creating a PocketPC game using VB2005.
I created a custom class for a custom object. I instantiate like so[code]...
Now, I have two problems. First, right now this is just overwriting the same object properties, again, and again. I need to somehow dynamically name the object. Then, I need to place these objects in an array so I can iterate through them...
In one of my forms witch I imported from VB2008 there are all properties saved in the *.resx file. One Property, of the Type System.Windows.Forms.Keys, can contain the Value 'Ctrl+F1' witch compiles fine in VB2008, but not in VB2010. To reproduce, simply add the following to any resx file:
I am writing a game editor, and have a lot of different "tool" objects. They all inherit from BTool and have the same constructor. I would like to dynamically populate a toolbox at runtime with buttons that correspond to these tools, and when clicked have them create an instance of that tool and set it as the current tool. Is this possible, and if so will it be better/easier than creating those buttons by hand?
I have a VB.NET application and use some third party (closed source) ActiveX controls. One of the controls represents a "camera" (connected over several interfaces) and I try to write an example how to work with several cameras in one application. To do this I allocate multiple "camera" objects dynamically as an array which works as expected like this:
Const NUM_CAMERAS = 2 Private MyCameras(NUM_CAMERAS ) As xxx.MCamera
But the camera objects needs to be allocated with WithEvents because they raise events when a new image was taken. I found out that WithEvents variables cannot be typed as arrays and this is a pretty common problem so I also found some workarounds: [URL]. This is already pretty good and I adopted this to my concept. So I have a MyCameras array and a MyCamera all "without Events", first allocate a new MyCamera object, add a event handler and then put it into the array.
Unfortunately I get an error when calling AddHandler Camera.ProcessModifiedImage, AddressOf MyHook
Normally "MyHook" is declared as Private Sub MyHook (ByVal sender As Object, ByVal ModifiedBuffer As xxx.ProcessModifiedImageEvent) Handles Camera.ProcessModifiedImage
Like in the "Button examples" I just removed the "Handles Camera.ProcessModifiedImage" but I get an error that "MyHook" has not the same signature as the Delegate Delegate Sub ICameraEvents_ProcessModifiedImageEventHandler(ImageIndex as Integer)