|
Wow ! u mean I CAN compile unmanaged C++ into IL ? why the managed extensions then ?!
what about STL and Standard C++ ?
|
|
|
|
|
Anonymous wrote:
Wow ! u mean I CAN compile unmanaged C++ into IL ?
No; Nish mis-spoke. The /clr switch allows you to use managed extensions in your C++ application. Anything that isn't managed is written as x86 while the managed stuff is written as IL.
There are some weird occurances that happen with regard to using the gcroot template on an unmanged class; but for the most part what I said above is correct.
You can verify this by opening such an application up with ildasm.
James
"Java is free - and worth every penny." - Christian Graus
|
|
|
|
|
James T. Johnson wrote:
No; Nish mis-spoke. The /clr switch allows you to use managed extensions in your C++ application. Anything that isn't managed is written as x86 while the managed stuff is written as IL.
Yeah, but I didn't totally mis-speak
Take an MFC app. Apply /clr. Compile and build it. Not one line of managed code. Yet it won't run on a machine without the .NET runtime. Dunno why!
The unmanaged code gets compiled to unmanaged code alright. But there is a basic IL stub that is generated. Maybe it does some elementary initialization.
Nish
Author of the romantic comedy
Summer Love and Some more Cricket [New Win]
Review by Shog9
Click here for review[NW]
|
|
|
|
|
With /clr switch the exe/dll automatically creates a dependence on mscoree.dll which is a .NET dll. It won't run without it and you can't delayload mscoree.dll.
Joel Lucsy (jjlucsy@ameritech.net)
|
|
|
|
|
/clr tells the compiler to generate MSIL, or "managed code", which runs in the context of the CLR. Once you compile with /clr, you can consume any managed datatypes, from the .NET Framework, or some other library.
/clr DOESN't take your C++ datatypes and make them "managed data". They're still allocated and destroyed by you, from the C++ or Win32 heap.
To create your own "managed data types" (garbage collected, and consumable by other managed applications) you need to apply some of the managed-extension keywords; primarily __gc.
You can also use #pragma managed and #pragma unmanaged to control within a module what code is compiled to MSIL, and what is compiled to x86.
Nick
This posting is provided “AS IS” with no warranties, and confers no rights. You assume all risk for your use. © 2001 Microsoft Corporation. All rights reserved.
|
|
|
|
|
You are correct. The point, however, was that the /clr switch creates a dependance on mscoree.dll whether or not you use any "managed code/data".
Joel Lucsy (jjlucsy@ameritech.net)
|
|
|
|
|
Ok so I have a MC++ Class Library and it is being called from a C# app. All hunky dory, except I cannot get the class library to write to any files when it is called from the C# app.
I wrote the equivalent code in the C# app and the file was created fine and in the right place.
Am I supposed to be doing something extra to tell the system that the class dll can write files?
The crappy thing is that no error is generated, in fact stepping through each line the system seems to think the file was created just fine. But no file appears.
I am using the XMLTextWriter to write the file. e.g. myXmlTextWriter = new XmlTextWriter (S"test.xml", System::Text::Encoding::UTF8);
I have used Flush and Close, no luck.
So what gives? thanks.
regards,
Paul Watson
Bluegrass
Cape Town, South Africa
The greatest thing you'll ever learn is just to love, and to be loved in return - Moulin Rouge
Alison Pentland wrote:
I now have an image of you in front of the mirror in the morning, wearing your knickers, socks and shoes trying to decided if they match!
|
|
|
|
|
|
|
I had to look and go through your code to find this out.
1. AfxEnableControlContainer is automatically called by CHtmlView so it is not necessary. But still it is a good practice to have it in the InitInstance.
2. MFC requires AfxOleInit in order for control containment to work and I am surprised to see that in VS.NET it is automatically called during CreateControl. If that fails MFC cannot create controls.
Now to the actual answer.
Activator.GetObject or Activator.CreateInstance initialize COM automatically if it is not initialized and the default is to initialize is COINT_MULTITHREADED. So when MFC tries to call AfxOleInit (COINIT_APARTMENTTHREADED) the call fails because you cannot change the apartment type. So the control creation fails.
But when you call AfxOleInit in InitInstance Activator.GetObject sees that COM is initialized so it doesnot do anything and everything is fine.
Step back, rub your eyes, take a deep breath, stretch a bit, and reflect on the relative importance of CP, CG, the age / travel time sustained by supposedly 'fresh' cheese curds, and Life in General. - Shog9
|
|
|
|
|
Rama Krishna wrote:
AfxEnableControlContainer is automatically called by CHtmlView so it is not necessary. But still it is a good practice to have it in the InitInstance
Yes, in fact I did not add it myself. The app wiz had put it there for me.
Rama Krishna wrote:
MFC requires AfxOleInit in order for control containment to work and I am surprised to see that in VS.NET it is automatically called during CreateControl
I had looked at the different overloads of CWnd::CreateControl but had not found any call to AfxOleInit, but just now I found that COleControlSite::CreateControl does indeed call AfxOleInit
Rama Krishna wrote:
Now to the actual answer.
Brilliant!!! Thanks
Regards,
Nish
Author of the romantic comedy
Summer Love and Some more Cricket [New Win]
Review by Shog9
Click here for review[NW]
|
|
|
|
|
Hey guys
In my MFC (/clr) app, I can't set breakpoints. I mean I can, but the moment I run it in debug-mode the maroon circle gets a question mark and this message pops up "The breakpoint will not currently be hit. No executable code is currently loaded at this location"
Author of the romantic comedy
Summer Love and Some more Cricket [New Win]
Review by Shog9
Click here for review[NW]
|
|
|
|
|
|
Hello,
I have an MFC program (/clr) that is a remoting client. My issue is that once we have got our remote object, then for some wacko reasons as yet unknown to me, I am unable to create a view for a frame window. The Create just fails.
My solution to this was to create the window and hide it before the remote object was obtained and then to show/hide it as required.
But the issue is that sometimes the user can do something where the remote object is created, then he goes back to the main window, then he comes back to this window where the remote frame/view is created. Now if the GC is given enough time to destroy the unused object, everything is fine.
But my problem is that the GC is sorta slow on all this and I am having problems.
So, how do I force the GC to destroy the remote object? And what do I do if the GC fails to recognize the object as unused and thus fails to free it? Is there anyway I can simulate a delete on a managed object?
Regards,
Nish
Author of the romantic comedy
Summer Love and Some more Cricket [New Win]
Review by Shog9
Click here for review[NW]
|
|
|
|
|
Nishant S wrote:
The Create just fails.
What is the error. What does ERR,hr say?
Step back, rub your eyes, take a deep breath, stretch a bit, and reflect on the relative importance of CP, CG, the age / travel time sustained by supposedly 'fresh' cheese curds, and Life in General. - Shog9
|
|
|
|
|
Rama Krishna wrote:
What is the error. What does ERR,hr say?
The view is a CHtmlView derived view and the call to Create returns false
I think once we've got a remote object, for some reasons we cannot create webbrowser controls. Because my Create call in the CFrameWnd derived class didn't fail, it was only the view creation in the CFrameWnd::OnCreate that fails
Nish
Author of the romantic comedy
Summer Love and Some more Cricket [New Win]
Review by Shog9
Click here for review[NW]
|
|
|
|
|
Are you initialzing COM correctly - CoInitialize(NULL) ?
[EDIT] Since you are using MFC are you calling AfxOleInit ?
Nishant S wrote:
Create returns false
Put ERR,hr is watch window it will show you the reason why it failed.
Step back, rub your eyes, take a deep breath, stretch a bit, and reflect on the relative importance of CP, CG, the age / travel time sustained by supposedly 'fresh' cheese curds, and Life in General. - Shog9
|
|
|
|
|
Rama Krishna wrote:
Are you initialzing COM correctly - CoInitialize(NULL) ?
Not using any COM, not much anyway!!! [Just a few lines to get the underlying web browser control and to set the html]
Rama Krishna wrote:
Since you are using MFC are you calling AfxOleInit ?
Hmmm. Nope. I mean I am not calling it on my own. Dunno if that might be the problem. Because the window creation (frame and view) succeeds *if* the remote object is not obtained. It fails *only* if we have obtained the remote object
very puzzling, very puzzling indeed!
Anyway it's part of a work-time tracking system app that I'll be submitting to CP soon, if I can only get rid of this goddamn error
Rama Krishna wrote:
Put ERR,hr is watch window it will show you the reason why it failed.
Huh? Just like that --- "Err,hr"
Author of the romantic comedy
Summer Love and Some more Cricket [New Win]
Review by Shog9
Click here for review[NW]
|
|
|
|
|
Nishant S wrote:
Not using any COM, not much anyway!!!
You need to initialize COM by calling AfxOleInit if you are using the webbrowser control. That is why Create fails.
Step back, rub your eyes, take a deep breath, stretch a bit, and reflect on the relative importance of CP, CG, the age / travel time sustained by supposedly 'fresh' cheese curds, and Life in General. - Shog9
|
|
|
|
|
|
I'm going to go out on a limb and say that it initializes COM for you and either MFC doesn't get to do its initialization or that it initializes it with settings incompatible with the web browser control.
Just a guess
James
"Java is free - and worth every penny." - Christian Graus
|
|
|
|
|
James T. Johnson wrote:
I'm going to go out on a limb and say that it initializes COM for you and either MFC doesn't get to do its initialization or that it initializes it with settings incompatible with the web browser control.
What does that mean?
Nish
Author of the romantic comedy
Summer Love and Some more Cricket [New Win]
Review by Shog9
Click here for review[NW]
|
|
|
|
|
Nishant S wrote:
Alright, then how does Create succeed when I don't obtain the remote object?
Instead of speculating over and over, it will be useful if you add those two lines of code and see whether stuff works.
Step back, rub your eyes, take a deep breath, stretch a bit, and reflect on the relative importance of CP, CG, the age / travel time sustained by supposedly 'fresh' cheese curds, and Life in General. - Shog9
|
|
|
|
|
|
I forgot to mention that
you also need to call AfxEnableControlContainer.
Nishant S wrote:
Huh? Just like that --- "Err,hr"
Yes. It is a very cool feature.
Step back, rub your eyes, take a deep breath, stretch a bit, and reflect on the relative importance of CP, CG, the age / travel time sustained by supposedly 'fresh' cheese curds, and Life in General. - Shog9
|
|
|
|