The passing of the memory functions was good enough to allow you to move betweenThat I believe is the main problem: all the runtime library dependencies which directly or indirectly call incompatible library functions.
There was an attempt to fix this back in SSLeay where the application called
one function which passed pointers to the malloc routines but it never worked.
I suspect the reason is that it didn't go far enough: it would have to also
pass pointers to things like stdio functions too.
debug and non-debug versions of the same library (compiler version and threading model.)
It is not good enough to all total portability since there a many classes of run-time
functions which have internal data structure dependencies depending on the compiler
version and the threading model. The stdio functions are another example of these.
An easy way to figure out where the dependencies lie are to compare the data structure
definitions in the CRT headers. If there are #ifdef's in the data structure definition
then you know there is a guarranteed compatibility issue.
smime.p7s
Description: S/MIME Cryptographic Signature