{"id":24913,"date":"2007-10-03T10:00:00","date_gmt":"2007-10-03T10:00:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/oldnewthing\/2007\/10\/03\/the-most-important-choice-in-writing-is-not-what-you-say-its-what-you-dont-say\/"},"modified":"2022-06-22T13:33:28","modified_gmt":"2022-06-22T20:33:28","slug":"the-most-important-choice-in-writing-is-not-what-you-say-its-what-you-dont-say","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/oldnewthing\/20071003-00\/?p=24913\/","title":{"rendered":"The most important choice in writing is not what you say, it&#8217;s what you don&#8217;t say"},"content":{"rendered":"<p>&#8220;The most important choice in writing is not what you say. It&#8217;s what you don&#8217;t say.&#8221; <a href=\"https:\/\/docs.microsoft.com\/en-us\/archive\/blogs\/ericgu\/\"> Eric Gunnerson<\/a> gave me that advice when I was writing <a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2006\/12\/07\/1233002.aspx\"> my book<\/a>. It&#8217;s sort of the writing version of &#8220;<a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2007\/03\/21\/1922203.aspx\">You don&#8217;t know what you do until you know what you don&#8217;t do<\/a>.&#8221;<\/p>\n<p>That&#8217;s why <a href=\"http:\/\/blogs.msdn.com\/oldnewthing\/archive\/2004\/07\/16\/185261.aspx\"> I&#8217;ll write<\/a><\/p>\n<blockquote class=\"m\">\n<p>Of course, you probably wonder this magical <code>pfl<\/code> comes from. It comes from the Multilanguage Object in mlang.<\/p>\n<pre>  IMLangFontLink2 *pfl;\r\n  CoCreateInstance(CLSID_CMultiLanguage, NULL,\r\n                   CLSCTX_ALL, IID_IMLangFontLink2, (void**)&amp;pfl);\r\n  ...\r\n  pfl-&gt;Release();\r\n<\/pre>\n<\/blockquote>\n<p>and not<\/p>\n<blockquote class=\"m\">\n<p>The <code>pfl<\/code> variable we&#8217;ve been using is an interface pointer to the <code>IMLangFontLink2<\/code> interface. We obtain this pointer by calling the <code>CoCreateInstance<\/code> function, asking for the object whose class ID is <code>CLSID_CMultiLanguage<\/code> (defined in the <code>mlang.h<\/code> header file) and specifying the interface ID (IID) of <code>IID_IMLangFontLink2<\/code>. The interface ID is a 128-bit value that uniquely identifies an interface; we use it here to specify that we wish to have access to the <code>IMLangFontLink2<\/code> interface. Since COM uses explicit reference counting, we must remember to call the <code>IUnknown::Release<\/code> method when we are finished with the interface pointer. Each call to the <code>IUnknown::Release<\/code> method decrements the reference count by one, and when the reference count drops to zero, the object is destroyed.<\/p>\n<pre>  IMLangFontLink2 *pfl;\r\n  CoCreateInstance(CLSID_CMultiLanguage, NULL,\r\n                   CLSCTX_ALL, IID_IMLangFontLink2, (void**)&amp;pfl);\r\n  ...\r\n  pfl-&gt;Release();\r\n<\/pre>\n<p>&nbsp;<\/p>\n<\/blockquote>\n<p>This is why I hate reading technical books. People think it&#8217;s better to write fifty words when ten are enough, that you should explain everything in excruciatingly tedious detail just in case there&#8217;s a reader out there who sees the word <code>CoCreateInstance<\/code> and says, &#8220;Gosh, I don&#8217;t know what that is, and I&#8217;m going to declare this book useless unless it explains everything from first principles.&#8221;<\/p>\n<p>What next? &#8220;The left open brace begins a block of statements&#8221;?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;The most important choice in writing is not what you say. It&#8217;s what you don&#8217;t say.&#8221; Eric Gunnerson gave me that advice when I was writing my book. It&#8217;s sort of the writing version of &#8220;You don&#8217;t know what you do until you know what you don&#8217;t do.&#8221; That&#8217;s why I&#8217;ll write Of course, you [&hellip;]<\/p>\n","protected":false},"author":1069,"featured_media":111744,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[26],"class_list":["post-24913","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oldnewthing","tag-other"],"acf":[],"blog_post_summary":"<p>&#8220;The most important choice in writing is not what you say. It&#8217;s what you don&#8217;t say.&#8221; Eric Gunnerson gave me that advice when I was writing my book. It&#8217;s sort of the writing version of &#8220;You don&#8217;t know what you do until you know what you don&#8217;t do.&#8221; That&#8217;s why I&#8217;ll write Of course, you [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/24913","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/users\/1069"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/comments?post=24913"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/24913\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media\/111744"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media?parent=24913"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/categories?post=24913"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/tags?post=24913"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}