I wish start/end of the arrow match the point A/B exactly.
\documentclass[convert,border=10mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.arrows, calc}
\makeatletter
\newcommand{\getxy}[3]{%
\tikz@scan@one@point\pgfutil@firstofone#1\relax
\edef#2{\the\pgf@x}%
\edef#3{\the\pgf@y}%
}
\makeatother
\newcommand{\darr}[3]{%
\getxy{(#1)}{\ax}{\ay}
\getxy{(#2)}{\bx}{\by}
\newcommand{\ang}{atan((\by-\ay)/(\bx-\ax))}
\path (#1) -- (#2) node[
draw=black,single arrow,midway,inner sep=0mm,outer sep=0mm,
insert path={let \p1=($(#1)-(#2)$) in},
minimum width=0mm,
minimum height={veclen(\x1,\y1)},
single arrow head extend=2mm,
double arrow head extend=2mm,
rotate=\ang,
] {#3};
}%
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (3,3);
\darr{A}{B}{hello}
\draw[red!90] (A) grid (B);
\end{tikzpicture}
\end{document}