Essentially, the issue at hand is where risk is going to be assigned. Whoever is risking the most has the potential to make the most. So, if you're doing a fixed price project, you are risking more than if you are paid by the hour. This means you should expect to be paid more for your time (quite a bit more), if someone wants to hold you to a fixed price for a project. This also means that the features have to be set in blood, and that there is a firm understanding that any departures from the feature set will require a new quotation.
So, as a corollary to what strongm says, if your client won't settle on the features ahead of time, you will need to resist giving a fixed price. Let the client know that you're more than willing to work out a fixed price, once the features of the program are equally strongly fixed.
From a sales standpoint, I've often found that charging by the hour to define features prior to coming up with a fixed price quote is a fairly easy sell. The deliverable is a document that includes a problem statement, and a detailed list of features. You tell the customer that you'll give them a quote based on those features, once we have them in place, and that they can feel free to shop the quote around if they like. By the time it comes to that, you've gotten paid so they've gone through the process of setting you up as a vendor, they like you, they feel like you understand their problem better than your competitors do, etc. so not using you to develop the product feels like changing vendors in mid stream.