The VMTs must match. I don't use FPC so I can't comment what the base object type is like, but make sure the VMT on the host side match what's on the DLL side. If you did not change the VMT on the C++ to match what it's like in FPC, then this can be a source of the problem. For example if you have more virtual methods in the C++ side than on the DLL side, when you call a c++ method it maybe calling the wrong method in the DLL side.

So, make sure your virtual methods and the calling conventions all match. There maybe other issue related to FPC, but again, I don't use it so I'm unable to offer any suggestions on its usage, sorry.