No way I believe for Visual C++ or almost anything that runs on modern Windows (or ancient 32-bit OS/2) platforms, because on those platforms the stack grows dynamically, that is, a new page of the stack is allocated only when your program tries to access the so-called guard page, a 4-KB block (for 32-bit Windows anyway) of specially crafted memory at the top of the currently allocated chunk of the stack. The operating system intercepts the exception that is generated when your program tries to access this guard page and (1) maps a new page of normal, valid stack in place of it, above the top of the currently allocated stack and (2) creates another guard page just above the new top, so it can grow the stack as needed later. The OS does this until the stack reaches its limit, and usually this limit is set very high.
And if your program tries to access any address that belongs to the unallocated part of the stack but lies above the guard page, your program will crash, because the OS has no way to intepret this. Your program just tries to access memory outside of its address space, even if the pointer belongs, theoretically, to the stack segment of the task.
However, if you need a way to find if an address belongs to the allocated part of the stack (that is, "an object on the stack"), the reference to Joe Duffy's blog is good. Just don't use StackLimit described there, get the current top of the stack using other, already described in this thread, methods, so you operate on the allocated part of the stack, not the entire, probably partially unallocated, one