Я хотел бы передать некоторые (dll или нет) указатели на функции в качестве аргументов некоторым функциям dll и вызывать их изнутри dll. Интересно, безопасно ли это, потому что я нашел информацию о http://publib.boulder.ibm.com/infocenter/zos/v1r10/index.jsp?topic=/com.ibm.zos.r10.cbcpx01/fpref.htm, которая:
В коде DLL предполагается, что указатель функции указывает на дескриптор функции. Вызов указателя на функцию выполняется сначала путем получения адреса функции путем разыменования указателя; а затем переход к функции записи. Когда указатель на функцию, не относящуюся к DLL, передается в код DLL, он указывает непосредственно на запись функции. Попытка разыменования через такой указатель приводит к неопределенному адресу функции. Последующее переход по неопределенному адресу может привести к исключению.
Применимо ли это правило к Visual Studio и другим компиляторам?
Что именно я пытаюсь сделать, так это решить проблему выделения и освобождения памяти между различными dll и не dll функциями. Моя идея состоит в том, чтобы передать два указателя на функции - для общих функций выделения и освобождения - каждому dll при некоторой инициализации (например, Initialize (& malloc, & free)), а затем выполнить все управление памятью, используя эти общие и, следовательно, всегда совместимые функции.