p6s:
Hi,
I would agree with you that this looks strange and maybe needs to be reported to Support via the https://support.smartbear.com/message/?prod=TestComplete form.
Indeed, the documentation that you referenced clearly says that if object is not found by WinFormsObject() method, then an error is posted to the log and stub object is returned. No exception should be thrown.
Also, IIRC, all non-Wait... versions of access methods (WinFormsObject, VBObject, ...) must use auto-wait timeout specified for the project. Usually this timeout is set to 30 sec. The use of methods' Wait-version serves two needs: a) to avoid errors in the log when it is expected that the target tested object may not exists and b) improve test performance by skipping auto-wait timeout (or improve test stability by specifying longer timeout on slow environments).
Long in the past I remember there were cases when people started to get objects to be not found by regular non-Wait methods with the release of new version of TestComplete or when migrating to new OS or hardware. In most cases this was caused by the fact that actual time taken by any method (Wait... or non-Wait) consists of some time spent by TestComplete internally to search for an object and of timeout to wait for an object to appear. And in the previous version of TestComplete the internal search time was long enough for the project to appear. But after search performance optimizations made for the newer version of TestComplete and low value of auto-wait set for the project, it could happen that the initial search for the object was so fast and the value of auto-wait was so low that the object did not appear within that time.
I think that this is not your scenario, but nevertheless... (considering mentioned by you timeout of 2-3 secs)