Dynamically Creating code and executing it
-
Does anyone know of a way (I would guess it would use macro's) to execute a string which represents a line of code I want to execute. example: CString strCode = _T("int nVariable = 3;"); -And now execute it. I know it could be done with interpreted languages like python, but I don't know about C++. -JD
-
Does anyone know of a way (I would guess it would use macro's) to execute a string which represents a line of code I want to execute. example: CString strCode = _T("int nVariable = 3;"); -And now execute it. I know it could be done with interpreted languages like python, but I don't know about C++. -JD
What do you mean "execute it"? Show it in a dialog box? Show the string in a dialog box (MFC): AfxMessageBox(strCode); or Win32 ::MessageBox(hWnd,strCode,"Title", MB_OK); ------------------------------ ©0d3 ©®4©k3® - That's me! :) ------------------------------
-
Does anyone know of a way (I would guess it would use macro's) to execute a string which represents a line of code I want to execute. example: CString strCode = _T("int nVariable = 3;"); -And now execute it. I know it could be done with interpreted languages like python, but I don't know about C++. -JD
I don't see how it could be done in a compiled language like C++. However, if you can move your dynamic code to a different language (eg: Tcl), you could load an interpreter from within your C/C++ code and execute the code within the interpeter (eg: by using TclEval()). /ravi "There is always one more bug..." ravib@ravib.com http://www.ravib.com
-
Does anyone know of a way (I would guess it would use macro's) to execute a string which represents a line of code I want to execute. example: CString strCode = _T("int nVariable = 3;"); -And now execute it. I know it could be done with interpreted languages like python, but I don't know about C++. -JD
You need to implement WSH host scripting. Then you should be able to use VBScript/Javascript to execute code, fire events etc... See http://www.codeguru.com/atl/ATL\_ScriptHost.shtml
-
Does anyone know of a way (I would guess it would use macro's) to execute a string which represents a line of code I want to execute. example: CString strCode = _T("int nVariable = 3;"); -And now execute it. I know it could be done with interpreted languages like python, but I don't know about C++. -JD
It can be done but it is a HUGE amount of work and, in most cases, not worth the effort. I implemented an on-the-fly machine code generator for the script engine in my company's product and it was not an easy task at all. This is similar to what JIT compilers for Java do. I actually know very little about assembly code. I just stared at a whole bunch of .cod files emitted by VC++ and sorted out how it works. Curiously, I found that VC++ only uses three data registers to do everything. Another curiosity is that the this pointer for C++ methods is not passed on the stack. It is loaded into ECX prior to the call. Anyway, What it amounts to is you build a block of bytes of data that are machine code and set a pointer to a function to the address of the block and (*execute_it). I think an interpreted language is probably the easiest way to go about this and there are many of them.
-
Does anyone know of a way (I would guess it would use macro's) to execute a string which represents a line of code I want to execute. example: CString strCode = _T("int nVariable = 3;"); -And now execute it. I know it could be done with interpreted languages like python, but I don't know about C++. -JD
You need an interpreter of commands, I made a interpreter for FTP a couple of years ago, it's the only solution... Best Regards... Carlos Antollini. Sonork ID 100.10529 cantollini
-
It can be done but it is a HUGE amount of work and, in most cases, not worth the effort. I implemented an on-the-fly machine code generator for the script engine in my company's product and it was not an easy task at all. This is similar to what JIT compilers for Java do. I actually know very little about assembly code. I just stared at a whole bunch of .cod files emitted by VC++ and sorted out how it works. Curiously, I found that VC++ only uses three data registers to do everything. Another curiosity is that the this pointer for C++ methods is not passed on the stack. It is loaded into ECX prior to the call. Anyway, What it amounts to is you build a block of bytes of data that are machine code and set a pointer to a function to the address of the block and (*execute_it). I think an interpreted language is probably the easiest way to go about this and there are many of them.
-
> Another curiosity is that the this pointer for C++ methods > is not passed on the stack. It is loaded into ECX prior to > the call. Just an FYI: IIRC, that is the "thiscall" calling convention. Peace! -=- James.
Yes, I know it is the thiscall convention. What is amusing is that the VC++ docs describe this correctly in one place and incorrectly in another. Here is the wrong description : This is the default calling convention used by C++ member functions that do not use variable arguments. The callee cleans the stack, so the compiler makes vararg functions __cdecl, and pushes the this pointer on the stack last. I have seen many people refer to this being pushed on the stack and that is not what VC does. There may be some compilers that do though. I don't know for sure.
-
Does anyone know of a way (I would guess it would use macro's) to execute a string which represents a line of code I want to execute. example: CString strCode = _T("int nVariable = 3;"); -And now execute it. I know it could be done with interpreted languages like python, but I don't know about C++. -JD
What fun! I designed and programmed ATE to test microcircuits, functional and in-circuit, and a cute little HP9825 desktop calculator ran the whole thing. You typed code into it's 64K memory, then saved the program on an 8" floppy disk. It's native language was hpl, which quickly expired because nobody liked a funny looking language (it used lower case). I liked it because one of the storable functions was the <Store> key. Once stored, the characters were treated as a command. That let me write programs that modified their behavior to adapt to the environment (and I mean physical - EMI, temp, etc.) and increase the accuracy of measurements on the circuit. It drove the QC people nuts to have programs around that kept changing themselves:cool: Let's bring back hpl!!!!
-
Does anyone know of a way (I would guess it would use macro's) to execute a string which represents a line of code I want to execute. example: CString strCode = _T("int nVariable = 3;"); -And now execute it. I know it could be done with interpreted languages like python, but I don't know about C++. -JD
You have to embed an interpreter in your program. There are plenty out there that are free and can be integrated into a C++ program. http://www.lua.org/
Todd Smith