一直以为Delphi与VC之间不能进行传递对象类型参数, 所以一直以结构或更普通的数据类型交换数据 , 但前段时间得一大神传授, 终于知道如何实现类对象的传递.
需要注意的是C++里面的struct才能与delphi里面的class一一对应, 而且,struct里面的元素地址不能随意改变(比如setlength),不然就AV了.
具体代码在: http://git.oschina.net/tigera15/delphi-vc-callwithclass/blob/master/delphi-vc-passClass.7z
Delphi的类原型:
type
size_t = NativeUInt;
MyClass = Class
p1: integer;
p2: pansichar;
p3: size_t;
p4: boolean;
p5: pinteger;
p6: size_t;
function callMethod(pv1: array of integer; pv2: size_t): integer;vitual;
stdcall;
End;
C++的类原型:
struct MyClass
{
int p1;
char* p2;
size_t p3;
bool p4;
int* p5;
size_t p6;
virtual int __stdcall callMethod(int* pv1, size_t pv2)
{
MessageBoxA(0, "run VC callMethod", "callMethod", 0);
int lvRet = p1;
for (size_t i = 0; i < p6; i++) {
lvRet += p5[i];
}
for (size_t i = 0; i < pv2; i++) {
lvRet += pv1[i];
}
sprintf_s(p2, p3, "return value:%d", lvRet);
return lvRet;
}
};