Look over the PowerPoint and Office APIs. You could use VBA in PowerPoint to write a macro that does something like this. If you want to read-in the PPT from your program, you'll have to interop the PowerPoint and Office assemblies (there are PIAs - primary interop assemblies - for Office apps on Microsoft's site). You should then read the Office Programming documentation. If I remember right, you can also use the Microsoft.VisualBasic.Compatibility assembly (even from C# - it's just IL after all) to use the IPicture (or is it IStdPicture? ...don't remember) if PowerPoint still uses that.
There was no ambiquity, I knew exactly what you were talking about. What I'm saying is that you should read the documentation for the property type that the image/picture properties return. That may have a Save method or something. Keep in mind, however, that you can't just serialize the type returned - you have to serialize the image represented by the property type, which is implementation specific. For example, I'm pretty sure you can save an image to a file but you might have to read that in and then base64-encode it. It probably supports writing to a stream, but this is a COM IStream, not a .NET Stream which works differently (so you'd have to define a COM-like IStream and implement that, perhaps wrapping the .NET Stream object).
What I can't figure out is how the Shape ties into this. Just looking at the interop assembly, it would seem that a picture is translated to a Shape, which might not preserve the actual image format (so, if you try to create an Image from a stream, it wouldn't work because it's no longer a JPG, BMP, GIF, etc.).
All I can say is read the PowerPoint and Office object model documentation. I couldn't find much, but I'm not sure I have the PowerPoint programming documentation installed (although I thought I specified a Complete install).
This is seema..I am intended to design user interface in C#.net for some hardware.For that I have to draw 24 filled rectangles on the form.I can do it simply using FillRectangle().But my aim is to draw one rectangle using some user defined function then when it will appear on the form then i want to copy it and past it on the form itself to creat more 23 rectangles and set there properties according to my wish(like length width and ID).Again I have to do specific event like mouse click event on those rectangles....So can anyone please suggest me how to do it?...I went through many site but not getting exactly what I want.PLZ PLZ tell me if anyone knows....
Your question is not clear for me,You want those Rectangles for some copy/pasting,width prperties.... why don't you simply use TextBox. But what ever your task is,youcan create a Windows Control and derive it from Control or TextBox class,and add properties in that or customize their existing properties,then it is easy to have 24 of it and set properties for each of them.
Den2Fly wrote: 1. How can I protect my code inside the .dll assembly (MSIL) from being decompiled and visible? there are some softwares out there that can reverse engineer a compiled .dll into a good source code.
Compilers that target the CLR ALL produce Intermediate Language, or IL. This - like Java bytecode - allows the system to JIT the IL to native code and execute it, so that it can be run on any OS (Microsoft's problem with .NET is that it relies too much on native OS resources, but it does provide a consistent UI). The Microsoft .NET Framework SDK even comes with a disassembler, ildasm.exe. For those of us who can read IL, we don't even need decompilers like .NET Reflector[^] (though it is nice at times!). There are just as many problems that can output this source code as well, although I have yet to see one that does an impeckable job with more advanced source code (using all the tricks of the languages).
All you can do - which is true of any program in any language - is make it hard and, therefore, costly to do so. I remember the words of Bruce Schneier with questions like these, who basically says that anything is crackable - it's just a question about the cost of resources to do so.
Make your program work well and hide your important code in complexity, or write native DLLs and P/Invoke or interop (use COM to make this easy) the functions and components in those native DLLs. Keep in mind, though, that they too can be decompiled (though decompiling C/C++ libs is more difficult, more expensive, and less correct than with IL and bytecode).
You can get obfuscators to obfuscate private members, but for every obfuscator there is a de-obfuscator (and they've really never stopped me - and I'm sure others - anyway, from seeing how something is done for academic reasons).
With ildasm.exe I can see functions and variables that are used in my assembly for each lines of codes,but not the VALUE of them. Does decomling with other tools are the same or they can show the value of them too?,for example Can I store a password in my codes in a varibale?
It does show the value, either in the static constructor (.cctor) or in an instance constructor (.ctor), depending on where you initialize the fields. So no, you shouldn't store a password in your code if it protected anything important. Same goes for private keys you use to decrypt values. If you store the private key, someone need only extract it and decrypt your values, whether they are in IL or your app.config (or proprietary) file.
Even a password stored in a native library isn't safe. First ask yourself why you need to store a password. Second, ask yourself what conditions are required of your application, like being Internet-aware. If it MUST be, you could always pull an encrypted password (say, through HTTPS - HTTP over SSL - using a Web Service or .NET Remoting, or even a simple GET or POST HTTP request) from the 'net.
If not, you should look into more advanced cryptography (like using the System.Security.Cryptography namespace elements). There are a couple tutorials here on CP, but you should try googling for some examples and discussions.
Heath Stewart wrote: First ask yourself why you need to store a password. Second, ask yourself what conditions are required of your application, like being Internet-aware.
Yes,but where ever password is and where it goes through,the KEY for encryption MUST store somewhere. You say native dll is not safe too,so where is safe?(Or safest place other than programmer mind) Of course maybe some other encryption method which do not hash with given key and methods that are one way.
ANYTHING you put in your assembly is visible to other people. If you use a password, they can see that. If you use a private key to decrypt information, they can see that. If you use a custom hash algorithm to hash your password so that only you can retrieve it (so you think), they can see that and run the same thing. Heck, even using the HTTPS mechanism I talked about can be replicated, but if your application accesses secure resources over the Internet, you at least have control over who/what you allow to access your service.
This is a big topic of software security and there are a lot of books and what-not out there.
If you're doing this for licensing reasons, there are more options available. Check out my article for instance, Using XML Digital Signatures for Application Licensing[^]. This is only conceptual, I remind you, and - being that it uses IL - it can be cracked (like I said before, anything can - it's just a question of the cost of resources compared to the cost of the information). You can bury the implementation in complexity, though.
There are many other solutions out there, too, such as XHEO[^] that use the same idea but gives you lots of default implementations (since mine is merely a discussion into the concept, not a full-blown solution) like communicating with a server. Some will even use a MAC address of a NIC or the ID on a CPU (for those that support it, although this can be very difficult and not reliable since not all CPUs have it (or enable it)).
.NET is hard to protect because of the ease of seeing information, which is why you might consider doing licensing in a native DLL - and there are many solutions and articles about this on the 'net.
Why am I mentioning licensing? Because you should allow your application to access protected resources with its own credentials because, as I said, those credentials can be hacked. Many applications will make use of Windows credentials, which are harder to hack and are provided by the Windows clients and servers. If you use licensing in your application, you (mostly) ensure that undesirable users aren't using your program, and that they use their credentials to access resources. There's also some lessons to be learned in these different approaches.
For instance, our application uses SQL Server over the LAN or through .NET Remoting on the Internet. We ask the user for credentials that are passed to SQL Server and validated. The program doesn't do this themselves - the person is required to provide credentials to protected resources. If we just let the application do it, we would have to store the same credentials for everyone (or encrypt them to an individual file for each person) which means that anyone can see them - even users that aren't paying for our system!
Colin's right - you should post this in the Suggestions forum. I will tell you, though, that this has been requested many times and I believe it will be a feature of the new CodeProject to be written in ASP.NET (whenever that gets finished). I guess asking again won't hurt, though, just don't be surprised if you get a barrage of insults for re-posting!
Well i don't really know whether i should be here, but i'm just after some advice really. I'm 18yrs old, and am studying C at the moment, which i'm finding challenging to say the least. I'm probably going to Leeds University to study Computer Science later on this year, and am just wondering if C and VB are the best languages to start off on? - This is what i've heard. I'm interested in gaining a grasp of object orientated stuff, as well as a more general purpose code, like C.
If anyone can shed any light on this, or just offer me some friendly advice to a beginner-programmer, then please please get in touch.
I'd say that if you want to do hardware control systems then C is the language of choice. If you want to do business oriented software then C# or VB.NET are better [if you are staying in the Microsoft world]. C++, in my opinion, is at a juncture. I've written windows applications with it and it is still used to create them, but C# is now better in that respect unless you need to coax the last clock-cycle out of the processor. C++ will be staying for a long time but as more enterprise systems get written in languages like C# then C++ will be relegated to legacy systems, OSes, hardware control systems and anything that requires very tight optimisation (in comparison to C#)
Perhaps if you let everyone know what area(s) you wish to go into on leaving university it might help guide a better answer. However, while at university you may find a preference for a particular language. (Some people even like COBOL )