chmdepkeyhelp

Why is keyhelp.ocx failing in my Visual Studio C++ application?


Using keyhelp.ocx to display popup HtmlHelp in a modern Visual Studio C++ application fails.

I get a COM exception with no sensible error code. Looking at the debug output, there seems to be an Access Violation behind the scenes.


Solution

  • Your executable is build with Data Execution Prevention enabled, via /NXCOMPAT. That's the default in Visual Studio.

    keyhelp.ocx is built using ATL7, which is incompatible with DEP - see http://support.microsoft.com/kb/948468

    You need to disable DEP (/NXCOMPAT:NO) for your executable or find an alternative to keyhelp.ocx (I don't know of one).

    (Note that's it's possible to enforce DEP system-wide - your code will still fail on such machines.)