解決済み: いくつかの実験の後、それは可能であるように思われます。
オーバーロードされたメモリ関数 (new、delete、delete[]、malloc()...) に沿ってメモリ マネージャーを配置し、割り当て/割り当て解除を担当することで、一般的な DLL 間の割り当て/割り当て解除の問題を回避できるかどうか疑問に思っていました。プログラムのどこでも発生する可能性があるため、一貫性が保証されます。
a.dll に次のようなメモリ マネージャーが含まれているとします。
class EXPORT MemoryManager
{
static void* Allocation( size_t uiSize );
static void Deallocation( void* pAllocated );
};
inline void* operator new( size_t uiSize )
{
return MemoryManager::Allocation( uiSize );
}
inline void operator delete( void* pAllocated )
{
MemoryManager::Deallocation( pAllocated );
}
b.dll を含むその他の場所:
int* piDummy = ExternalDllFunctionCallingNew();
delete piDummy;
それは問題を解決しますか?