Fixing EVEMon’s Crashy C++ DLLs

April 18, 2009 – 20:22

I have been working on EVEMon for about two months now, taking on the responsibility of committing changes to the trunk, fixing bugs and adding new features. As a project I have been involved for several years submitting bug fixes and little features, it was down to my experiences with EVEMon that I decided to implement Subversion and Trac at work.

Unfortunately the first time it came to me to be responsible for a release, it seemed to go terribly wrong. The updated installer worked fine, and it seemed initially there were no problems with the updated code base. However BattleClinic shortly went a little mad with bug reports similar to this one:

EVEMon Version: 1.2.7.1283
.NET Runtime Version: 2.0.50727.1434
Operating System: Microsoft Windows NT 6.0.6001 Service Pack 1
Executable Path: “C:\Program Files\EVEMon\EVEMon.exe”

System.IO.FileLoadException: Could not load file or assembly ‘lgLCDNETWrapper, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail. (Exception from HRESULT: 0x800736B1)
File name: ‘lgLCDNETWrapper, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null’ —> System.Runtime.InteropServices.COMException (0x800736B1): The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log for more detail. (Exception from HRESULT: 0x800736B1)
at EVEMon.LogitechG15.Lcdisplay.Dispose(Boolean bDisposing)
at EVEMon.LogitechG15.Lcdisplay.Finalize() in D:\EVEMon\EveMon.LogitechG15\Lcdisplay.cs:line 70

For those who are not familiar the above is the crash report generated by EVEMon when a .NET exception is unhandled. lgLCDNETWrapper is the C++ library EVEMon uses to communicate with the Logitech G15. A similar error was generated for EVEMons other C++ component the window relocator.

Tonto Auri quickly spotted that the problem was something to do with the re-compiled C++ DLLs and switching the new DLLs with those from an older package resolved the problems. Whilst this was a fix, I wasn’t willing to just revert the changes and give up on the changes we had made to the G15 library, additionally I was concerned that we had not made changes to the window relocation code and that was causing at least one person a problem.

Quite a bit of searching about with Google and Stack Overflow resulting in finding these two little gems of information:

These two posts basically gave me the tools and the knowledge to fix EVEMon’s problems.

First I made the sudden (and “facepalm”) realization that EVEMon deployed the Visual Studio 2005 Redistributable; we had moved to Visual Studio 2008 SP1 about a month before the release of 1.2.7. I confirmed this with the Dependency Walker utility, by walking lgLCDNETWrapper.dll I was able to confirm that version 9.0.21022.8 of the Microsoft CRT Library (Microsoft.VC90.CRT) would be required.

The next trick was figuring out which re-distributables to deploy with EVEMon to ensure the end user would have all the dependencies required to use all of the features; frustratingly it seems that Microsoft only bundles the latest version of the re-distributables with Visual Studio 2008 and that was version 9.0.30729.1 which was not going to cut it.

Enter Nuonsofts excellent article providing a step by step guide on adding the required compiler flags to ensure the latest version of the CRT was bound. I did find a nice GUI resource editor that was capable of getting the manifests out in XN Resource Editor which made the process a little faster.

A little bit of hacking later the updated Visual Studio 2008 SP1 CRT DLLs and manifest file were deployed to the Microsoft.VC90.CRT folder within the EVEMon program files directory as the VC80 CRT libraries were in the past and the two C++ projects were setup to bind to the latest version with the _BIND_TO_CURRENT_CRT_VERSION=1 preprocessor definition.

A bit more poking arround with XN Resource Editor and Dependency Walker showed we were now in a far better position to have a working copy of EVEMon in the hands of our end users.

Zoe

April 17, 2009 – 21:28

We got Zoe and her sister Kerry in the summer of 2000 before I left for University, it had been a few years since our last cat, Emma, had died and my parents decided it was time to have a cat (or cats as it turned out) in the house again.

Zoe (2000 - 2009)

I love cats, despite being allergic to them, so I gladly sat in the back of the car with the two kittens in their travel box, the as yet unnamed kitten Zoe looked a bit pitiful and couldn’t stay standing up I was worried about her, although as it turns out she made the journey just fine.

As they had just been separated from their mother they were nervous little things, Zoe hid in the corner of the conservatory, Kerry explored a little. I felt so sorry for them I took my sleeping bag and slept in the conservatory with them. During the night Kerry decided to get down the end of the sleeping bag and meow at my feet, Zoe who was more timid settled for sitting near by.

I don’t know why but Zoe seemed happy for me to hold her, I used to carry her round the room moving her in the direction that she turned her head, she quickly cottoned on and took the opportunity to sniff out the parts of the room she was unable to find under her own power; as long as we kept moving she was happy to stay in my arms.

Sadly, Zoe had to be put down yesterday (Thursday). I won’t go into the details as this is not how I want to remember her, I am glad I got to see her one last time a couple of weeks back before leaving for Spring Harvest. We are all going to miss her personality and affection.

Bye Bye Zoe.

Driving Test #2

April 16, 2009 – 17:42

Well another day, another driving test and another fail. I had hoped to say that this was a pass day today but it was not to be. I think the nerves got the better of me, I was okay for most of it although my throat kept drying up.

This test actually came out much worse than last time, again I had two serious faults, however more than twice as many minor faults with 14. It was a bit of a shock to me as I had realized I had made some minor mistakes here and there but had not spotted the major faults.

I won’t go into the minor faults, as they are too numerous to enumerate and honestly I can’t even pinpoint what I did wrong, I was focusing on the task at hand and have since totally forgotten the majority of the test itself.

Serious Fault #1 – Meeting a car in the road
This was one of the serious faults from my last test, I got a minor in the same area on this test too. Fundamentally I think it is a judgment problem on my part, I see a which has priority on the opposite side of the road I don’t seem to judge very accurately, I think perhaps in future I need to yield to them regardless of my judgment.

Serious Fault #2 – Road position
I cut across the lanes on a roundabout basically, I don’t even remember doing it and apparently I hadn’t done it on previous roundabouts, perhaps it was because it was the end of the test, and I had a lapse in concentration – although I do appreciate that is all it takes for someone to get hurt or worse.

I have re-booked for the end of May, at which point we will see what happens on Driving Test #3.

Nerves

April 16, 2009 – 9:24

The nervousness is really manifesting itself this time round despite taking my hay fever medication last night I am sneezing this morning, I think it is just the nerves. I woke up with a headache, the Paracetamol hasn’t really helped that much I am hoping it is going to clear as I head into town to sit in a coffee shop to relax a bit.

I feel nervous about taking the test, although neither outcome has any real consequences other than spending a bit more money and having it hanging over me for a few more weeks.

Driving Lesson #41, #42 and #43

April 15, 2009 – 19:40

Like last time in the run up to my test I have not blogged every single lesson, however after a week of Holiday and the last three lessons I am going to be taking my test again tomorrow at 14:32.

I think I am ready to take the test, I felt that way last time – don’t know if I was or not, I am not the person to judge that. However tomorrow we will find out what happens. I have come to the conclusion that the test is pretty much a sequence of events that you either deal with as the DSA deems to be correctly, or not. It’s quite hard for me to get my mind around this method of testing, but that is they way it is to be.

Will post with my results tomorrow.

Driving Lesson #40

March 29, 2009 – 20:17

This post is four days late, and I have nothing to Report. Couple of weeks until my test – I have kind of lost interest in driving, I would like to get it over and done with but I am not overly worried about the test itself.

Drive Safe!

Driving Lesson #39

March 19, 2009 – 20:47

Had quite an enjoyable drive today, did four manovures first time round (reverse round a corner, reverse park, bay parking and turn in the road), that’s not to say they were without error but they were passable.

Almost didn’t see a car driving round the Sainsbury’s car park, Kev put his foot on the break at the same time I put the break down, he was faster though so I felt the pedal go out from underneath my foot.

I was quite happy with the drive all in all, getting used to scanning the road, although I do find it hard work.

Driving Lesson #38

March 12, 2009 – 21:39

It might be that I am tired, and hungry but I got a little fed up with driving. It takes quite a lot of concentration and it gets me home more tired than if I had sat on a bus for a hour and a half.

It sound silly but sitting on that bus for two hours is the only time I get to relax and pray. Two things you can’t really do when you are driving, the other thing that a bus lets you do when you are on it and if you are feeling up to it is give your full concentration to the book or podcast you are trying to extract information from which is really nice. I think the bus is the only place in the whole world where I know I will not be interrupted.

I was driving well today according to Kev, could have fooled me as I was stalling like it was going out of fashion. Kev was trying to get me to anticipate situations more acutely by looking ahead down the road identifying hazards long before I got anywhere near them. Something else I can practice on the bus (if I can be bother that is… seriously sans motivation today).

Anyway another lesson tomorrow and got my next test booked for the 16th April, see how I do in that one.

Driving Lesson #37

March 6, 2009 – 21:15

I am getting slack updating the blog, I had my first lesson after my driving test yesterday, in an odd kind of way I actually felt more confident. I know I failed the test however having someone else in the car and not having it all go totally wrong gave me some confidence.

The lesson yesterday basically involved driving round finding places to do manoeuves, I make a point of saying “finding” as it was strangely difficult – at one point a van driver decided to park on the corner I was in the process of reversing round, amusingly enough he even nodded and smiled at us.

Anyway, should be doing some more lessons over the coming weeks I will try and keep up with the updates, thanks for the comments, texts and tweets regarding my test.

Driving Test #1

February 24, 2009 – 17:16

Well as I have let the entire internet know via Twitter that I failed my driving test lets go through some analysis. But first a little bit of information about the Burges Hill driving test center two important things:

  1. The test center does have a toilet
  2. Don’t be tempted to touch the tap in the toilet it fell off when I used it

As for the test itself the results were as follows:

  • Dangerous – 0
  • Serious – 2
    1. about 5 minutes into the test I was approaching another car which I expected to stop and it didn’t I did not slow down enough to be able to safely park and the examiner had to use the brake.
    2. about half way through the test I thought it was a national speed limit (no driveways or side roads for a while and no lamp posts) so I was doing about 38 in a 30 zone.
  • Minor – 6
    1. Control -> Gears – don’t know what this was I probably went round a corner in 3rd gear.
    2. Use of Mirrors -> Change Speed – didn’t look in my rear view mirror when changing gear.
    3. User of Speed – As with the serious I probably went over 30 in a 30 zone.
    4. Progress -> Undue Hesitation – There was a right turn that had two vans parked on either side of the left turn restricting my vision.
    5. Junctions -> Observation – I didn’t check my mirror on the second part of a consecutive turn.
    6. Positioning -> Normal Driving – I probably moved a little too close to the kerb or central markings.

I knew I had failed within the first 5 minutes of the test, that didn’t make it any easier, it was very strange being in a car without Kev there – I have never driven anywhere without Kev. I am going to try and book another test for the Easter holidays after I have had a little more practice.