See the question and my original answer on StackOverflow

TypeLib tools display ... typelib information, which is some kind of a high level definition of types.

It will not give you raw binary interface layout (exact method signature, calling convention, which must be __stdcall for COM interface methods).

So, your definition for IAcroAXDocShim is totally wrong, hence crashes due to method signature mismatch. Here is a correct partial definition of it:

MIDL_INTERFACE("3B813CE7-7C10-4F84-AD06-9DF76D97A9AA")
IAcroAXDocShim : public IDispatch
{
public:

    // LoadFile is the 3rd method. You were "blindly" calling this one instead.
    // Note if you don't need these 2, you could just define them as
    // virtual void DontCallMe() = 0;
    virtual HRESULT __stdcall get_src(BSTR* pVal) = 0;
    virtual HRESULT __stdcall put_src(BSTR pVal) = 0;
    virtual HRESULT __stdcall LoadFile(BSTR fileName, VARIANT_BOOL* ret) = 0;
    // the rest is undefined, but if you don't need it, you don't have to define it.
};