Please consider using GPGME instead of calling gpg directly. GPGME offers a stable, backend-independent interface for many cryptographic operations. It supports OpenPGP and S/MIME, and also allows interaction with various GnuPG components.
GPGME provides a C-API, and comes with bindings for C++, Qt, and Python. Bindings for other languages are available.