The Chromium Embedded Framework (CEF for short) is an open source framework for embedding Chromium-based browsers in other applications. The base implementation is targeting C/C++ applications but ports for other languages exist (these include Java, C#, Delphi, Python).

The nightly builds (for various systems and platforms) of CEF are available for download at These include:

  • CEF source code necessary to build your apps with
  • CEF dynamic and static library files (together with its dependencies) that you must use in your application
  • C++ wrappers for the C API
  • source code of two sample applications, one called CefSimple and one called CefClient
  • symbol files for debugging binary distribution of CEF
  • build of CefClient sample app with all dependencies and resources

Building the 64-bit version of the sample applications is not straight forward though. In this article I will show what you have to do make it work.


The following prerequisites are necessary:

  • Visual Studio 2013
  • CMake tools

Notice: Though CMake should be able to generate projects for Visual Studio 2015, I was not able to make it happen. Moreover, the cef_sandbox.lib lib is built with Visual C++ 2013 which means the modules that are linking it should also be built with the same tool set.

You should download the nightly build of the development branch for Windows 64 bit and unzip it.

Create Visual Studio projects

To create Visual Studio projects run the following command from the CEF’s main folder in a console:

This will create:

  • a VC++ 2013 solution called cef.sln in the main folder
  • VC++ 2013 project files for libcef_dll, cefsimple, cefclient
  • two additional project files called ALL_BUILD and ZERO_CHECK

This is how the content of the CEF folder looks after generating the Visual Studio project and solution files.

This is how the Visual Studio solutions looks.

Create 64-bit configurations

Though the download is suppose to represent the 64-bit version of the framework, and the DLLs and LIBs in the Debug and Release folder (i.e. the CEF builds and its dependencies) are indeed built for the x64 platform, the generated projects do not have configurations targeting the x64 platform.

What you have to do is:

  • create configuration for targeting the x64 platform (by copying the settings from x86)
  • change the Output Directory for all projects and configurations to be $(SolutionDir)$(Configuration)\ which means the output folder will be the existing Debug or Release folder from the main CEF folder.
  • for the libcef_dll project change the Librarian > All Options > Additional options to /machine:X64 %(AdditionalOptions)
  • for the cefsimple and cefclient projects change the additional dependencies settings to point to libcef.lib, libcef_dll_wrapper.lib and cef_sandbox.lib, instead of the relative paths as in the project.
    This is how the list should look for all platforms and configurations:
  • for the cefsimple and cefclient projects add $(SolutionDir)$(Configuration)\ to the Library Directories for all configurations and platforms
  • modify the Post Build Event for the cefsimple and cefclient projects to no longer copy files from the solution’s Debug and Release folders to the project’s Debug and Release folders.

    Initially, the post build event looks like this (for Debug configurations)

    It should be changed to look like this (beware at the output folder indicated by outputresource; it should be the Debug\Release folder in the main folder):


In the main folder there is a sub-folder called Resources. The entire content of this folder must be copied to the out folders, Debug and/or Release. These files are necessary for the sample applications to run properly.

Building and running

With all these in place you can build the projects. The build should succeed and the content of the Debug folder for instance should look like below.

You can then run the two sample applications. This is how cefsimple looks.

This is how cefclient looks.

, , , , , Hits for this post: 10472 .

Dear Microsoft,

I have recently read the two blog posts about the new “developer experience” with Visual Studio 11 (part 1 and part 2). I don’t have the IDE yet (since the beta will be made available on February 29), but from the blog posts I see that you once again changed the look and feel. Why do you have to do this all the time? Can’t you sell a new version without redesigning the UI? We don’t get used well with a version and you change the game again. And like it wasn’t bad enough to do such a big changed, you decided to go with a chrome theme. This is what I call “Windows disabled”; you can’t get a good feeling of what is enabled and what is not. Everything is in tones of gray and confusing.

Why do you have to invest all that time in redesigning the UI with each release? Why don’t you focus on making the current UI more responsible (for instance VS2010 takes 1 minute on my machines to start) and less buggy? Why don’t you invest that time in building features that make our lives easier? Like providing multiple windows for search results (not just two) or supporting auto completion (like it was in all versions until VS2010) in the folder selection fields in the New Project dialog?

So dear Microsoft, please

  1. make it possible for us to change the Chrome theme to the old colored theme
  2. don’t change the UI with each version

A concerned developer

PS: I still can’t get out of my mind the horror or scrolling with the mouse on Windows 8 maybe 5 screens of colorful tiles to get to the app that I want to launch. Awful! As it stands I see big failures on the horizon.

, , , , Hits for this post: 32325 .

This Wednesday Google released version 11 of the Chrome Browser. One of the most important addition was the support for speech recognition for English. One can enable speech recognition in an input field by adding the x-webkit-speech proprietary attribute, like in this example:

The result should look like this (of course, in Chrome 11, in the other browsers it looks just like a normal input):

You can press the microphone icon and speak. The browser sends the recording to the Google servers, where the speech is transformed into text, which is then displayed in the input field.

While this all is great, it doesn’t work that well, at least not with the English accent of a Romanian. It does work well with simple text such as “hello world”, “chrome 11”, “a beautiful day” or “show me the money”. However, in my tests, most of the time, the recognition failed. For instance “speech input” is sometimes recognized as “speaking book”. “twenty eleven” was most of the time recognized as 27, and very rarely as 2011. For “this is the year twenty-eleven” I got “this is beer 37”, which is probably the number of beers the service had earlier :). When trying “nothing else matters” I got “smoking a snickers”, “the king of snickers” and “latino snickers” until it finally figured out the correct text. So then I asked the browser “can you handle a longer sentence?” and the answers were “200 number centos”, “can you send unknown person”, “to handle a number sentence”, “200 number sentence”, “can you endorse a number sentence”, “can you handle a medical center”, “can you handle the number symptoms”, “can you pandas syndrome symptoms”, “kings honda center”, etc. etc. No matter what pronunciation I tried, it wasn’t able to pick the right text.

My conclusion is that in theory such a feature is great, but in practice Google still have a lot to work on it.

You can try it out here (with Chrome 11).

You can read more about HTML5 features in this presentation at

, , , Hits for this post: 24007 .

I recently read an excerpt from Joel Spolsky’s book User Interface Design For Programmers available on his (former) blog. This is a great book about designing user interfaces, with examples of bad and good ideas. I’m getting the printed version and I recommend this to all building UIs.

Now, yesterday I had a problem with Google Documents (which no longer worked on my WinXP machine with any browser, as it continuously unsuccessfully tried to download a 237 bytes file called download.gz) and I though that deleting the cache might help. So I opened Google Chrome options dialog and then the Clear Browsing Data dialog. It looks like this.

I was stunned to see the dialog started with the phrase “Obliterate the following items”. For God’s sake what is obliterating? I want to delete the cache, I don’t care about obliterating, and whatever that means. I don’t want to fetch a dictionary and look-up for the meaning of the word. Excuse me Mr. Google Programmer, that I (probably like many of the people of this world who are not native English speakers) don’t know what “obliterate” means. Yes, it does sound archaic, it does sound like J.R.R. Tolkien but it stops me doing my work. All I wanted to do was selecting what to delete and delete. Instead I spent time figuring whether that means to select what to keep or select what to delete (luckily it didn’t say purge). I had doubts so I had to search for the meaning of the word. Sure, now I know one more (fancy) English word, but overall, I lost one minute doing anything else but deleting the cache.

So, my recommendation to you Mr. Google Programmer is to read Joel Spolsky’s book. I’m sure there are things you can learn from it. And start using simple words and sentences that everyone understands.

As for what “obliterate” means, here it is:

  • Mark for deletion, rub off, or erase
  • Make undecipherable or imperceptible by obscuring or concealing
  • Remove completely from recognition or memory
  • Do away with completely, without leaving a trace
, , Hits for this post: 23705 .

A Story About Browsers

I’m sometimes asked what browsers do I use and why. I use Firefox and Chrome, 95% of the time, and IE for those few Microsoft sites that are specially designed to work only with IE. Here is a story that shows an argument why I use those two.

A few days ago I used my father’s laptop to do some web browsing. My father is not a computer specialist, but he knows how do use a computer for basic stuff like writing documents, browsing the web or downloading pictures from his digital camera. His laptop runs Windows XP and he had IE 6. Seeing that I though that’s so 2006. So I decided to upgrade that to IE 8. While IE8 was downloading I also decided to download and install Chrome for my own use. It took about a minute to download and install it. I was already surfing the web with Chrome by the time IE8 had done downloading.

Next step was to start the installer, but surprise, IE8 was requiring .NET 3.5 SP1. This was only 56MB or something so it didn’t take lot of time to download (but this could be very different in other geographical locations), however I thought that was a prerequisite whose purpose I don’t necessary see. So I started to install it and surprise: I got an error message that .NET 2.0, which was already installed, could not be uninstalled because it was not found. After some failed re-attempts I decided to uninstall .NET 2.0 manually and it worked well. However, running the .NET 3.5 SP1 setup again ended with the same error. So I decided to try .NET 3.5 without SP1. After a longer download the setup ran into the same error. Next, I downloaded .NET 3.0 and tried to install, but with the same error. At that point it was quite clear to me that there was something wrong with the uninstallation of .NET 2.0. After reading reports of similar problems on the web and without any suggestion being actually helpful I decided to download version 2.0 of the framework. Its setup allowed me to Uninstall or Repair and I chose to Uninstall. It said everything was OK so I tried 3.5 SP1 setup again, and this time it worked! Finally I was able to start the IE8 installation and it required to download and install a few updates and a couple of Windows restarts, and eventually it was up and running, one hour later after starting!

So my question to Microsoft is: how do you expect someone without good knowledge about computers and software installation be able to go through such a scenario? Chrome installation worked gracefully with 3-4 clicks and in less than a minute I was able to use it already. IE8 requires lots of updates and prerequisites like .NET and restarts and God forbids something goes wrong, you’re lost in installation. If the installation doesn’t work, you don’t have a product!

This is one reason (and definitely not the most important one) I prefer Firefox and Chrome over IE.

, , , Hits for this post: 23007 .