A family of Microsoft relational database management systems designed for ease of use.
I did realise. I'd been trying to find out if anyone else had already done it because I was trying to figure out handling versioning nicely.
The short version is:
C++ / CLI DLL to provide a stdcall based wrapper to the .NET functionality. (all .NET 4.5)
On the VBA side, Declarations for the wrapper API, plus LoadLibrary calls to get the appropriate x64/x86 wrapper version loaded.
Plus a simple XML serialisation based "dictionary" for arguments on both sides of the API.
That makes everything work with const char * and int parameters to keep things simple.
Interestingly, using "Long" for the callback reference seems to work under VBA7 + x64 and VBA6 + x86 which I wasn't expecting.
In the wrapper you have to go through a bunch of jiggery pokery with Assembly Resolution (because the default resolution folder is the MS Access install folder) to get the main DLL load process to work.
Then I have "Load" (sets up the wrapper and .NET), "Setup" (to load the specific application interface class and set up call backs) and then "OpenForm", OpenReport" and "Command" methods for the actual calls you want to make.
It's kind of flakey when you are developing if you trigger a recompile in the wrong place because it may break the callback pointers, but seems to be solid when using an MDE or ACCDE.