我想通过 asm 块调用 C++ 成员函数。编译器是 MSVC++ (VS2008),可移植性不是问题。我必须为嵌入式系统构建一个远程处理/RMI 类型的机制。客户端发送对象名称、方法名称、参数(序列化),我需要将方法调用到适当的对象。我可以从 PDB 文件中获得的类型信息。我需要编写一个通用的 Invoke 函数。我被困在如何调用将对象作为参数的成员函数。特别是。我无法获得指向复制 ctor 的指针。任何想法。
PS:下面的代码为 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];
}
}