Back on 02/06 Heikki Leivo had this to say in a thhread about the poor state of the API and its docs: "Well, hmm, maybe you should not take it granted that the return value actually means something... :-P" I chuckled to myself at that, but now I see that it isn't far off the mark. Consider the SldWorks::get_Visible() function. The API docs state: Syntax (Com) status = SldWorks->get_Visible( &visibility ) status = SldWorks->put_Visible( visibility ) Property: (VARIANT_BOOL) visibility TRUE if the application is visible, FALSE if not Return: (HRESULT)status S_OK if successful An innocent looking description, very straightforward. Let's dig deeper. VARIANT_BOOL is defined as a data type that should be one of two values. Those values are VARIANT_TRUE or VARIANT_FALSE, which map to 0xffff and 0x0000 respectively. In bits, that's all ones or all zeroes. If one assumes that SW follows the rules for VARIANT_BOOL, then one would assume that the API docs above should say VARIANT_TRUE and VARIANT_FALSE, instead of TRUE and FALSE. After all, professional programmers know this stuff, but documentation writers often don't. The API is littered with copy/paste errors such as this. This is the way I approached such API functions in the past. "It must be a typo in the docs", I said. Sadly, today, I discovered the opposite. When the API docs say that the function returns TRUE or FALSE, they mean it. "Fine," you say. "Big deal. How much difference can there be between TRUE and VARIANT_TRUE anyway? They are probably equivalent in everything but name. You're making a mountain out of a molehill". If only it were TRUE. Or is that VARIANT_TRUE? You see, TRUE is represented by 0x01, which is markedly different from 0xffff. In decimal, these are 1 and -1 respectively. It is frightening to me to see such a glaring problem in the published API. Typically, the API is the cleanest because it is what the customer sees. Lots of ugly things happen behind the scenes, but always a pretty face up front. Now I must be suspicious of everything. Jim S.