Correctly calling C++ from assembly is tricky business. You need to know the calling conventions exactly. Which register holds
this, etc. If you are calling a virtual function then you have to look the address up in the objects virtual function table. How to do that is highly dependent on your compiler and if you change your C++ class then your asm will probably break. That is, if you add/remove
virtual keyword then the index into the function table will change for other virtual functions as well.
If you want to be confident you are doing it right, then you should really compile your C++ into asm (there is a gcc option to do this) and look at the assembly directly. Then you won't have to ask "how do I ..." as often either because you can just code it in C++ and then see what gcc produces.
I take it there's no way to call delegates from asm though?
Of course, you can call anything from assembly because all of your C/C++ code is compiled into assembly. That doesn't mean it's easy or a good idea, but it can always be done.