Placeholder Image

字幕列表 影片播放

  • hello.

  • In this video, we're going to look at how we can change the behavior of a program after we've compiled and released it on.

  • I'm going to do this by looking at using an external scripting language to augment the functionality of our original program.

  • In this case, I'm going to be using Luis because, like Louis, it integrates with c++ very well.

  • And it's a very quick language, and it's also sent tactically, quite simple.

  • The practice of using scripts toward mentor programs is getting more and more common, particularly in the gaming world, where the modification of games is actually becoming a business in its own right.

  • It's also very useful for businesses and industry to be able to modify the program's rapidly without needing to re compile original source or get hold of the original developers.

  • So I'm going to take a very quick look at how we can get Lewis and C++ talking to each other, but I should point out that this video is not intended to be a lewd tutorial.

  • I believe Louis sent tactically simply enough that if you've got even the most basic programming knowledge, you'll be able to look at some Louis code and understand its purpose.

  • I'm going to start with an empty c++ program.

  • It's just a in Maine, but so I don't have to answer the same question 1000 times over.

  • I'm just going to quickly show how we get hold of Lewis and set it up.

  • Firstly, go to the loo it dot org's Web site.

  • This is the home of all things Lewis and click the download button.

  • Now you can download the entire source for Louis, but I'm not going to do that.

  • Instead, what I suggest is you go to binary and you download the binaries and said, What we don't want to do is compile all of the source.

  • If you're linens, she might want to do that, but I don't and then click on the latest version of Louis.

  • So in this case, it's 5.3 point five ongoing download what you need.

  • So in my case, it's Windows Library.

  • I went to download the dynamic version of Louis.

  • It's going to be loaded in a za dll on.

  • I'm going to choose the 32 bit version, which is this top one here.

  • And here is the Zip file.

  • I've just downloaded it.

  • Contained a static library, a dynamic library on an include folder with some head of files in.

  • At this point, I should probably mention that I'm showing you how to do things the way I do it, which might not necessarily be the best way.

  • In fact, when it comes to embedding external languages, there are many, many, many ways to achieve the same thing.

  • How you come to that decision depends on the application of your building on how you intend it to be used.

  • Since Liu is so small, I like to include a local copy of it in my C++ project On the right here I have my visual studio solution.

  • So I'm going to create a new folder in here.

  • I'm going to call it blew up 535 which represents the version we just downloaded on into that folder.

  • I'm going to copy the contents of the ZIP file.

  • I'm then going to take a copy of the deal l file and paste it directly into the project folder.

  • And as I've just mentioned, there are 1,000,001 ways of achieving the same result, particularly on linen.

  • She may want to install Luis to a known location on always referenced that one instance of Louis Louis, fundamentally a C library.

  • So I need to tell the compile that I'm going to be dealing with C defined functions.

  • I do that using the ex turn key word.

  • And then I'm going to include the loo ahead of fasters I need directly referenced to the local Lou a 535 path of the visual studio project.

  • After we've included the head of files we need to link to the library now in Windows and Visual Studio, I can use the hash pragmatist for this will be lots of people complaining about that because not all compilers supported some guarding it with Win 30 to this approach saves me from having to alter any of the project properties directly.

  • Depending on the building tool chain that you're using, you may need to include additional directives to the compiler toe linked to this library, and that's it.

  • That's all we need to start using Luis.

  • One of the nice things about Louis is it doesn't really get compiled until you need it, so it always exists in a nice text form on.

  • This is perfect for modification because it allows other people to edit that Texan an understandable way.

  • Let's start with a very simple example to demonstrate what I mean.

  • Well, to create a standard string called Command on, I'm going to define something in that command A equals seven plus 11.

  • The goal here is to get Lou to execute this expression on return.

  • The result.

  • To do anything with Louis, you need to create a Louis ST Now, the function syntax for interfacing with Luke is a little bit old school and wordy.

  • But actually using Luis is quite simple and intuitive.

  • On Louis convention, it takes that a single capital l represents a single instance of allure virtual machine.

  • So here I have created that Lou a virtual machine.

  • I'm not going to tell that instance of the virtual machine to do something, and it'll return an error code whether it could do it or not.

  • In the simplest possible way, I'm going to tell Louis to simply execute that string with the Do String Command.

  • I pass in an instance of the loo, a virtual machine, and I'm also going to pass in my strength now because it's a C function.

  • Standard string doesn't really apply, so I need to actually get that as a character buffer using the sea strip method.

  • And now we've reached the first and most important lesson When embedding any external scripting language, you must validate what's happening because you've got ultimately no control of what the end user.

  • In light of scripted, the script could contain syntax errors.

  • It could contain malicious code.

  • It could contain code that locks up, freezes your program.

  • And there are other things, too, regarding the information transferred from the C plus plus to May to the scripting language to May, and we'll look at that in a bit more detail later.

  • So the first thing I'm going to do is make sure that that string executed successfully by checking the value that was returned.

  • In this case, we can check to see if our was equal to lure.

  • Okay, if it wasn't okay, I'm going to interrogate the virtual machine about the nature of the problem, and to do that, I'm going to interrogate the Louis stack on.

  • I will go through what the Louis stack is in a minute, but right now, just stay with me.

  • Assuming the script did execute successfully, we want to get the value A from our command.

  • Well, in this case exists globally within the loo, a virtual machine.

  • So I'm going to use the glue it get global function to give me access to the variable, eh?

  • On here in lies.

  • Another round of validation.

  • I don't know what type A is bluer fundamentally is reasonably type lis.

  • This is very different to C plus plus where everything is quite explicitly defined, what it is and how it's stored in memory.

  • Now I am expecting the result.

  • A to be a number.

  • And so I'm going to test explicitly.

  • Is it a number?

  • And again, we see this strange notation on I will describe what that is in a minute, knowing that a is now definitely a number, I can reasonably safely convert it to a C plus plus float to hear I've created a variable a in c++ on I've used the Louis to number Command to convert whatever a waas into a number and I'm casting it to afloat.

  • I'm now just going to output that value to the council.

  • Now there's a further little bit of housekeeping to do before people start writing in and complaining.

  • Whenever we've created a lua virtual machine, we should also clean it up.

  • We can use the loo a close function.

  • To do that on this will make people really angry.

  • I'm also going to throw in a system pause just because it makes making the video of it easier.

  • So here we've got a simple program.

  • We take a command A equals seven plus 11.

  • We create a lua virtual machine and we tell it to execute that command within check.

  • Did it successfully execute the command?

  • And if it did, we try and extract the value A as a number so we can display it in C++.

  • If it didn't successfully execute the command, then I'm going to display any error messages that the loo a virtual machine has returned.

  • So let's take a quick look.

  • Well, we can see that Lou Awas successful in that It added seven and 11 and gave us the result.

  • 18.

  • But let's see how helpful Lucan be by having a syntax error to our command.

  • In fact, it even returns on line one of our command.

  • The number was malformed.

  • So what's this all about?

  • Them?

  • Lewin C++ talk to each other Various stack.

  • And if you remember, a stack is a first in last out data structure.

  • So as data gets put in, it starts filling up the box.

  • And in principle, you can only take data out of the box if it was the last item put in it.

  • However, the Louis Stack does kind of break this rule as its allows us to index individual elements within the stacks buffer.

  • And this is quite an elegant solution to a particular problem.

  • As I've already mentioned, a in Louis could be anything we've not declared a type for it.

  • A is simply some object with a value on this present c++ with a problem because it likes everything organized and defined.

  • So I want us to conceptually envisage that each element on this stack is actually a box that contains some data and a description of how that data might be interpreted.

  • And so when we call functions like Louis is number, what we're doing is asking the box to test its contents to see if it can be interpreted as a number.

  • When we called the Lewis get global function, and if you remember, we passed to it the little virtual machine and are variable.

  • An interesting transaction occurred into the stack.

  • We put the variable, eh?

  • Louis then went away and popped a off the stack and pushed onto the stack.

  • The box that it has that defines what a is and in this case is also associate it with a value 18.

  • The Louis stack could be indexed in two ways.

  • One is explicitly starting at one.

  • Hardly that's a 123456 which implies that zero is an empty stack.

  • Herbert Lewis also provides a second way to index a stack, and you can index it relative to the top of the stack to the top is minus one.

  • The next one down is minus two minus three, minus four minus five, etcetera, etcetera, etcetera.

  • This is a convenient notation to make sure you're always working with data near the top of the stack, which is likely given the functions that you've been calling.

  • No doubt this does take a bit of getting used to on.

  • We'll see.

  • It does become reasonably complicated when you start exchanging more sophisticated data structures.

  • But what is quite nice is it is always deterministic, so you can always work out where you are on the stack.

  • So looking at our get global function, we can see that we're effectively pushing the name of a box a onto our stack.

  • Louis then looks for a box named A and replaces it on this stack with the contents of that box.

  • We know that the minus one index is going to be the top of the stack, so I can interrogate that location on the stack to see.

  • Can that box be interpreted as a number?

  • Well, in this case, it can because it contains the value 18.

  • Since it can be interpreted as a number.

  • I then asked Louis to go and directly convert its contents of that box to a number that C plus plus can understand.

  • When we put the syntax error into the command, it didn't know how to execute the command, and it placed an error message as a string on the top of the stack.

  • I wouldn't blame you for thinking well, so what?

  • The source seems like a lot of effort to add 7 to 11 but Lou is actually quite a powerful and well supported language, so we can use more complicated functions within the framework.

  • So let's say I wanted to take the sine function off some value.

  • Let's see what happens this time.

  • Oh, well, we've got the syntax error attempted to index and nil value.

  • It doesn't have any representation.

  • For what math waas in that command?

  • Well, math is in fact, one of many Lou libraries, but we need to tell our lunar machine which libraries it can have access to, because don't forget being safe when you're running people's code and you don't know what they've written is very important.

  • Explicitly listing all of the library by hand could be quite tedious.

  • So Louis, thankfully provides the function Lewis Open Lives, which opens sort of the basic set of libraries that most programs will use.

  • This has now added math to the virtual machine.

  • So let's try it again, and we see this time it's quite happy to compute it, and we end up with well, whatever the result is, the standard libraries in Louis provide all of the basic things that you might expect a programming language to provide, including things such as file handling on operating system manipulation.

  • But since Lewis has a robust community around it, many other third party libraries are also available.

  • That can do pretty much anything and everything you needed to do.

  • Since I'm going to be checking the status of the loo, a virtual machine quite frequently, I'm going to create a little utility function to help do that.

  • It just checks for an error message, which means I can simplify my program.

  • I think it's important at this point to demonstrate that the lure virtual machine is persistent, so any changes to it last between calls.

  • So in the first command, we executed this mass expression.

  • But let's say, on the second command, I want to use the result from the 1st 1 So a equals a plus 100 for example.

  • I'm not going to reuse the code I've created to execute the next line so we could see the first time we got the original result.

  • Then we got the same result, plus 100 with a little bit of floating point.

  • Rounding on this implies that weaken sequence instructions to the loo, a virtual machine which makes sense.

  • It is after all, a fully functional programming language in its own right.

  • But it also means that we could construct these instruction commands as necessary in our c++ code.

  • But let's be honest, doing things line by line sucks.

  • What we actually want to run is a Louis script.

  • I'm going to add a new text file to my program.

  • I'm going to save it.

  • As in this case, I'm going to be video example Don Luis.

  • Then I'm going to add that text file video example dot lewis still got the text of the end of it.

  • You're scared of that.

  • I'm going to add that to my visual studio work space now, Basically, visual studio can syntax highlight Louis, so things get a bit simpler to read.

  • So I've got what is a Louis script.

  • Onda Louis script is quite an important concept, because here the strings are still hard coded within the C plus plus program.

  • But if we now externalize them is a script other people can edit them on, our program will run them.

  • Let's test this by taking out two silly commands and adding them to the script.

  • We'll save that.

  • I got to go back to the C++ program on I'm going to delete this second half.

  • And instead of the Do String Command, I'm going to call the Do file command on instead of the commanders of String.

  • What is expecting is a file name, video example.

  • Don Luis.

  • We no longer need the command.

  • We could get rid of that.

  • So now Lou will load this file and execute all of it.

  • Let's take a look.

  • Well, no surprises.

  • We get exactly the same results as we did before, but without needing to re compile the program, I can change the nature of the script on rerun and you see, visual studio didn't even compile.

  • It just ran the Louis script, which is perfectly fine.

  • That's exactly what we want on this framework allows us to do our first simple thing with Louis, and that's just use a Louis script as a settings file fear application.

  • So I'm going to define some values in my Louis script, which I'm going to import into my c++ program.

  • We can see in these settings there's some common linkage.

  • They all look like they define a player.

  • So in my C plus plus program, I'm going to create a structure which represents a player and we'll create a single object player.

  • We've seen already how to interrogate global values in a Louis script this time, instead of looking for the variable, eh?

  • I'm looking for this string, and I'm expecting it to be a string, and that's an important thing.

  • Is string on instead of returning a floating point this time, I'm going to convert to string.

  • So this feeds into what I was saying earlier.

  • It's very important that you know what the nature of the data you are expecting is.

  • I've modified the code here to simply display the player's name, Kieran.

  • Excellent.

  • Now a naive approach is to duplicate this for all of the different fields.

  • So I just modified the program to read in all of those settings, I only see Squire Kieran of we will level 20 and I don't think I even need to demonstrate that if I change these settings, the string will change in the sequence plus program.

  • So using Lou is simply a configuration file for something is quite simple, but it did seem a little involved.

  • There's a lot of effort to go to their just to extract the data that you're looking for now.

  • That's because of how we have structured the settings in lure itself.

  • Since we've got lure available to us, we may as well leverage its abilities to handle information for us.

  • So instead of defining all of the properties of a player object individually, let's actually create a player object on Lou are being lured the several ways to go about doing this.

  • So a simple one is using key and value pairs.

  • So let's give it the key title and give it the value.

  • What we have here starts to demonstrate the power of Louis.

  • We've effectively created a box called Title and given the box contents of Squire on.

  • We've put that box in an overall box called Player.

  • Lou has additional ways of reaching the same goal.

  • So let's have a look how we interrogate this global object player to get the contents and I'll just comment these out.

  • Well, starting at the top of our C plus plus code, we know that player name is no longer what we're looking for.

  • What we're looking for is a global object called player Now player, as we defined it is no longer simple type.

  • It's actually a table containing names and values.

  • So I'm going to make sure that the global it is found is in fact a table.

  • And just to keep things clear, I'm going to remove the previous code to find a particular element in a table.

  • We need to add the name of that element to the Lewis stack, so I'm going to use the loo.

  • It push string command to do just that.

  • And what's important to note is that the location of the table has now changed.

  • Where is minus one indicated it was at the top of the stack.

  • Now, at the top of the stack is the string name.

  • The table will be a minus two.

  • A call to the Lewis Get table command.

  • Don't forget, it's at minus two.

  • Well, look at the top parameter of this stack.

  • Find the relevant key value per pop the name off the top of the stack and replace it with the value that we're looking for.

  • So the top of the stack now contains the value of the key that we were searching for.

  • However, our stack is now not arranged.

  • The way we think it might be.

  • So we need to maintain our stack by popping the top element off.

  • Mmm.

  • Maybe someone notes in order here after the first call to get global, we know that the object player was placed at the top of our stack.

  • Remember that these things on the stack essentially boxes with a name.

  • So this box contains a table.

  • So I used the Louis is table command on the top of the stack to verify that indeed it is a table.

  • It is an object that consist of other things.

  • Those are the things are keys on values on not to confuse things too much, but these values could be other tables.

  • But I'm leaving that well alone.

  • For the time being, the top of our snack was denoted as minus one.

  • I want to search my table for a specific key value, Per in this case, I want to use the key name to try and find the value, Karen.

  • So I need to issue the key to the loo a virtual machine, and I do that by pushing it onto this stack.

  • This has now changed the indices because minus one is always the top of us back and minus two becomes the location where the table existed.

  • I then call the Louis get table command, being careful to make sure that I choose the right slot on the stack.

  • This command uses the value at the top of the stack.

  • In this case, it's the string name.

  • It pops that off and uses it to return the appropriate value wants to get table command has successfully executed.

  • I then call Lou to string on minus one the top of the snack to ultimately get the value that I'm interested in.

  • But now I'm left with the value at the top of my stack that I no longer want.

  • So it's important to pop that off the stack, resetting the stack toe how it wasit the start.

  • If I choose not to pop the value off the stack, I can still do things.

  • I just have to maintain the indices properly.

  • This could get quite complicated when working with large structures and structures with nested structures, so I find it's always better to maintain your stack at the micro level rather than the macro level.

  • This means I could couldn't paste the same code now to get the other elements of the structure I'm looking for.

  • And you may notice, I can also do things out of order because I'm doing a key value search each time.

  • The old one out is, of course, level.

  • Even though the key is a string, the valuer expecting is an interview just before run it a quick reminder of what the original script looks like on I'll Click Play.

  • And of course, we see the result that we expect.

  • So far we've looked at very simple methods to extract information from a loo file on.

  • They can get a lot more complicated than what I've shown here again.

  • It depends on your application and how you're approaching the solution to your problem.

  • But what we really want to do with external scripting language is is get them to solve problems for us.

  • I would be good to be able to call functions in Louis from our secrets close program, so let's have a look at just that.

  • For now.

  • I'm going to comment out this code because I want to re use it later.

  • I'm going to go back to my Louis scripts and I can leave that I'm going to create a function I'm going to call it, and stuff on the function is just going to take two variables.

  • Who was going to simply add them together and return the result?

  • Variables are going to be A and B.

  • Of course, the function must return something.

  • So I'm just simply going to return a plus B.

  • But I'm also going to add a little utility to help us keep track of where we're up to.

  • You don't need to do this, but it makes the video a little bit more visually interesting.

  • I'm going to use the Print Command to inform me that Louis has indeed been called.

  • So I'm going to have a little square brackets with Lou in it and a note that the AB stuff function has been called.

  • In fact, I'm also going to put it the parameter values.

  • The two little dots.

  • Basically, can Katyn eights things together the loo a print command will output to stand it out.

  • That's the same console that I'm using in my C plus plus program.

  • Calling Allure function is actually quite easy, but I will stress that from this point on in the video.

  • I'm not going to include all of the necessary error checking just to keep things a little bit clearer.

  • The function, just like any variable, is just defined as a box with something in it.

  • In this case, it contains a function.

  • So it's important that we, first of all, get that box and put it on our Louis stack.

  • I will test to make sure that what is in that box can be interpreted as a function.

  • If it can, I'm going to push two things onto the stack, is pushed to numbers just directly 3.5 and 7.1.

  • That's going to be our A and B arguments.

  • I'm not going to use a new function.

  • Loopy call on this takes the arguments of the Louis stack How many arguments were providing in this case?

  • That, too, how many arguments were expecting in return on the final argument is a little bit more advanced that's actually used to define how our errors handled within the Louis script, and we might look at that in a later part in this series.

  • So, in a similar way, the do file function has executed the whole script, The P.

  • Cole function has just executed the single function with the arguments that we've provided.

  • If this is all executed, okay, then we need to look at the result that's been returned because we have told Luis that the function is expecting to arguments.

  • It will have popped those off the stack in order to use them.

  • So we know that the top of our Louis stack will reflect the returned result of the function.

  • We've just called somebody's put quite of a bogus message in here.

  • C++ called in Louis the ad stuff function with those parameters and in return.

  • And here we use the loo itude number function to turn whatever is at the top of the stack to a number, and we'll display it.

  • So let's take a look.

  • Or we can see that Lou first out put it with the print command, the two parameters that we passed in, albeit with some floating point rounding.

  • And then I'll see program.

  • I got the results 10.6, which is correct on displays that so here we've off loaded a task to Louis to go and solve.

  • Of course, the sea program, once compiled isn't easily modifiable, but the Louis function certainly is.

  • So instead of adding stuff, let's multiply stuff straight away.

  • No compile needed.

  • The result is different.

  • You could even go a SW far to make your C program sensitive to this text file changing, although that's quite an advanced thing to do, might leave that also for a later video.

  • Now we can call functions in Lewis.

  • We can lean on Luis to start doing more complicated things, So let's have a get play function into which we pass an index.

  • I've modified the Louis script to contain a small database off the players and added a get player function to return the player at a specific index in the c++ code.

  • I'm going to modify it to now find the get player function on.

  • I'm going to push a specific argument in this case.

  • Zero.

  • The play of the zeroth location.

  • I'm only going to call the function with one argument on.

  • I'm only expecting one result.

  • The player object.

  • I'm now going to borrow the code I wrote before.

  • So this time, depending on the argument that I provide to loot when calling the get player function, it will choose the appropriate player from its array of players.

  • Let's see what happens.

  • So it's before we see Squire Kieran A.

  • Well, level 20.

  • But if I change the code to now, find the other player.

  • So I'm just changing the argument we get.

  • Lord Diego, Brazil.

  • The Louis script is now making decisions for us.

  • So there we've looked at C++, calling Lou functions very flexible and powerful thing to be able to do because I get Lou is a complete programming language.

  • It can have its own loops, its own decision making its own access to system libraries.

  • It could do whatever it needs to do.

  • But sometimes Louis may need to call functions off the host environment c++ environments in this case.

  • So let's take a look at that.

  • I'm going to create an additional Louis function.

  • I'm going to call it do a thing, and it's going to take two parameters A and B, so I can re use a little bit of the code I've got already and asked before I'm going to make it print out the fact that it's been called just so we can keep track.

  • But then I wanted to call a function in the C plus plus environment.

  • I don't have a name for this function yet, but I'm just going to create a variable.

  • See, I'm going to call it host Function Toe, which I'm going to pass in the parameters A and B.

  • So it does seem a little bit redundant that we're creating arguments A and B in C program passing them to Lower Louis, then passes them back to the sea program.

  • But this just just going to demonstrate the transactions that are required?

  • In fact, you know what?

  • Let's just modify those slightly in the lure environment.

  • So we know that the slightly different parameters I don't want my liver function to return the computed value.

  • I'm going to modify the c++ file to call the do a thing function.

  • And as we did before, I'm going to push to numbers five and six and call the function.

  • I want to get rid of the code displaying the players.

  • So right now, let's just call the do a thing function and see what happens.

  • We can see that do a thing was cold, but then we got an error that line 34 attempt to call a nil value global host function.

  • Of course, we've not defined what host function is on that error.

  • Don't forget was caught by a little utility function check clue that we created at the start.

  • So we need to tell the lure virtual machine what host function is on when creating a function in c++ that is, call a ble by lower.

  • It has to follow a specific definition.

  • It is the function name.

  • I always prefix it with a little Louis.

  • So I know that the different I was going to call it host function and it takes a single argument, which is the Louis ST.

  • What this function returns isn't the result of anything.

  • It's the number of arguments that will be passed back to Louis.

  • So in this case, the argument is going to be one the value which will ultimately be passed to see.

  • Don't forget.

  • Of course, we don't have to pass simple values.

  • We can also pass complex table structures as well.

  • Let's do something in this function.

  • I'm going to get the values A and B that air on the loo, it stack that has been provided to us, but you'll notice something different.

  • I'm not indexing the minus one and minus two.

  • The way I interpret this is I've got a fresh stack to play with, and it's already pushed onto that stack.

  • The two arguments that it's calling these two on, it's probably good practice to make sure that the number of arguments you are expecting has actually been returned.

  • And you can do that with the Louis get top function, which will return how many elements air in the stack.

  • I've not done that here just to keep things a bit clear.

  • What I will add to this is a little output just so we can keep track of were things were up to so we can see host function has been cold, and then I'm going to calculate the result in this case, a simple multiply.

  • I then want to push back onto the Louis stack, the result with the lower push number function, and as I mentioned earlier, I'm only pushing one thing onto the stack.

  • So that's the value that I'm returning one.

  • So this is great.

  • We've now defined a function in C++.

  • We need to link it to the virtual machine and Lou, a very conveniently provides a routine for us to do that.

  • Louis Register on, innit?

  • I provide a string name.

  • So that's what Lou will actually use to call the function.

  • And I provide a function pointer to the function that we've defined, and that's all we need to do.

  • So in the area where we've called the original do a thing function, let's display what the ultimate result is and see if all of this works.

  • So the first thing that's happened is the do a thing.

  • Function in Lou was called with the Values five and six.

  • That function then went on to call host function with the values 15 and 18.

  • And that's because that's what we've described in our Louis script to do.

  • We added 10 to the five ennui Timesthe six by three The host function in the c++ environment simply multiplied its two arguments together and 15 multiplied by 18 is 270.

  • The loo function simply returned that result back to us, so the sea environments ultimately sees the 2 70 value again.

  • Yes, a little bit redundant, but we've covered sort of all use cases here of transaction between c++ and Louis.

  • And so that's that we've really only taken a very scratch the surface.

  • Look at Interfacing Lewis and C plus plus on.

  • What we've seen is it's actually not the most trivial thing in the world.

  • But it does get simpler as you get more acquainted with how the Louis Stack operates.

  • Being able to enhance your programs functionality is a really cool thing to do, certainly when you can stop creating games and applications that can be modified by other people.

  • And that's exactly why I wanted to include this video before going to the next part of my top down, city based car crying game, Siri's, because I am actually going to be using Luis to handle game settings on mission based operations in that application.

  • But you may have noticed that this video is also attacked with the ominous hash one in implying that it's part of the largest Siri's and I think it will be, though I don't know what the schedule will be because there's a lot more cool stuff you can do with Lou and C plus plus.

  • Anyway, I've put some code on the get hope for this.

  • It's not quite exactly the same as what we've seen in the video that simply because it doesn't really make much sense on its own.

  • So I tried to light an annotated form, which covers all of the basic transactions between the two different environments.

  • So they have a play with that and let me know on the disc, or did you have any difficulty getting it set up?

  • If you've enjoyed this video, give me a big thumbs up.

  • Ever think about subscribing and I'll see you next time.

  • Take care.

hello.

字幕與單字

單字即點即查 點擊單字可以查詢單字解釋

B1 中級

在C++中嵌入Lua #1 (Embedding Lua in C++ #1)

  • 3 0
    林宜悉 發佈於 2021 年 01 月 14 日
影片單字