[Mono-list] Catching C-callbacks through InteropServices
Simon Ask Ulsnes
simon@ulsnes.dk
Fri, 28 May 2004 20:14:22 +0200
Hi there!
I'm writing a GnuPG interface for Mono/.NET using GPGME (GnuPG Made
Easy, which is the C API applications use for connecting with gpg).
So far, it works fine, I can retrieve keys and encrypt/sign. However,
the GPGME API is constructed in such a way that in order to retrieve a
passphrase for use with decryption, you have to give it a callback
function returning the passphrase as a const char*.
What I would do is to make a property in my GnuPGEngine class (which
manages communication with the C layer through InteropServices) which
will then be given to the real GnuPG engine (a GpgmeCtx, which means a
GPGME Context object) through an internal callback.
How is this best done?
The API syntax in C for setting the callback function for the context is:
gpgme_set_passphrase(ctx, &get_passphrase, NULL);
where get_passphrase:
static const char* get_passphrase(void *HOOK, const char *DESC, void
**R_HD);
With the above, the get_passphrase function never gets called. What to do?
- Simon