Delphi调用VC的类并引用(参数,执行类方法等)

      一直以为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;
	}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值