いくつかの(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 関数の間のメモリ割り当てと割り当て解除の問題を解決することです。私の考えは、2 つの関数ポインター (一般的な割り当て関数と割り当て解除関数) を初期化 (Initialize(&malloc, &free) など) ですべての dll に渡し、これらの一般的で常に互換性のある関数を使用してすべてのメモリ管理を行うことです。