The implementaion is fine. You are right that VAX must know something about the STDMETHOD/STDMETHODIMP pairings. The only problem is that it should be leaving:
STDMETHOD(Cancel)();
in the header but doesn't. All trace of the method is removed from there.
For now, I am just copying the declaration line before Calling Move Impl and adding the ;. It is still a bit easier than doing everthing by hand. But it does seem like a bug.