Chcę wywołać funkcję członka C++ za pomocą bloków asm. Kompilatorem jest MSVC++ (VS2008), a przenośność nie jest problemem. Muszę zbudować mechanizm typu remoting/RMI dla systemu wbudowanego. Klient wysyła nazwę obiektu, nazwę metody, argumenty (serializowane) i muszę wywołać metodę do odpowiedniego obiektu. Informacje o typie, które mogę uzyskać z pliku PDB. Muszę napisać ogólną funkcję Invoke. Utknąłem, jak wywołać funkcję składową, która przyjmuje obiekt jako argument. Specyficznie. Nie mogę uzyskać wskaźnika do skopiowania ctor. Dowolny pomysł.Wywołanie funkcji członka C++ z argumentem odniesienia z asm
PS: Poniższy kod kompiluje i działa poprawnie do C :: funcRef
#include <stdio.h>
struct Point
{
int x;
int y;
Point()
{
x = 10;
y =10;
}
Point(const Point& p)
{
x = p.x;
y = p.y;
}
virtual ~Point()
{
}
};
class C
{
public:
void funcRef(Point& p)
{
printf("C::funcRef\n x= %d, y =%d\n", p.x, p.y);
}
void funcObj(Point p)
{
printf("C::funcObj\nx = %d y = %d\n", p.x, p.y);
}
};
void main()
{
C* c = new C;
Point p;
//c->funcRef(p);
// this works
__asm
{
lea eax, p;
push eax;
mov ecx, c;
call [C::funcRef];
}
// c->funcObj(p);
__asm
{
sub esp, 12; // make room for sizeof(Point)
mov ecx, esp;
lea eax, p;
push eax;
// how to call copy ctor here
mov ecx, c;
call [C::funcObj];
}
}
Ludzie tutaj: http://www.asmcommunity.net/board/index.php?topic=17897.0 wydaje się, że nie można uzyskać adresu konstruktora kopii. – us2012