是啊,但是我还是必须把VC的多继承转换成delphi,该怎么办啊? 比如,这样的: class H5_DLLCPP DataSet : public H5Object, public AbstractDs { public: protected: private: }转换成delphi该怎么办呢?哪位大侠遇到过这种问题,麻烦指教..
DELPHI 不提供多继承, 那你就定多几次嘛... 例如: class BaseA, class BaseBclass C: public BaseA public BaseB 这样的话, 在DELPHI就写成 BaseB = class public BaseA end;C = class public BaseB end;这样C就有B也有A的内容了吧, 只是单纯要多写一次而已.DELPHI和VC, 类的写法在表面上注意的内容是比较少的. 但实现底层是极大不相同的.1. VC下, 虚表地址都是this指针下的第一个地址值, DELPHI下不是, 这样导致Interface类的相互使用时, 会有不同的方式, VC只要把类强制变换成Interface即可, DELPHI下, 虽然写法一样, 但内里DELPHI的接口地址跟实例的地址是不相同的.2. VC下, 函数默认是cdelc调用方式, DELPHI默认是fastcall, 并且DELPHI的fastcall别以为跟VC的fastcall就相同了, 完全不同的, DELPHI的self是用EAX传递的, VC的this, 好像是用ECX传递的. 最安全的做法是都采用stdcall3. VC下, 类函数指针有使用, 要自己显式声明和显式调用(用(this->)XXX), DELPHI的成员函数, 都可以由TMethod代替, 用法当然是DELPHI的方便得多了. 但要实现VC和DELPHI的成员函数能够相互调用, 则必须要写stdcall. 不用stdcall 得要自己写汇编代码调用函数.4. DELPHI下, 要注意其RTTI信息的编译, DELPHI的self指针下, 除了虚表, 还有RTTI信息表, 还有类继承信息表, 这些信息, 会有编译选项可以开启或关闭, 默认下开启, 这样导致VC里面某些类的使用会造成不同的写法.
2. C语言中有多重继承,但是Delphi却只能单根继承
3. C里面的友元,Delphi里面没有吧
4. C里面有宏,Delphi也没有
5. 继承的访问方式,也有一些不同
这个不好举例吧,只好具体问题具体对待了,LZ加油。
比如,这样的:
class H5_DLLCPP DataSet : public H5Object, public AbstractDs {
public: protected:
private:
}转换成delphi该怎么办呢?哪位大侠遇到过这种问题,麻烦指教..
例如: class BaseA, class BaseBclass C: public BaseA public BaseB 这样的话, 在DELPHI就写成
BaseB = class public BaseA
end;C = class public BaseB
end;这样C就有B也有A的内容了吧, 只是单纯要多写一次而已.DELPHI和VC, 类的写法在表面上注意的内容是比较少的. 但实现底层是极大不相同的.1. VC下, 虚表地址都是this指针下的第一个地址值, DELPHI下不是, 这样导致Interface类的相互使用时, 会有不同的方式, VC只要把类强制变换成Interface即可, DELPHI下, 虽然写法一样, 但内里DELPHI的接口地址跟实例的地址是不相同的.2. VC下, 函数默认是cdelc调用方式, DELPHI默认是fastcall, 并且DELPHI的fastcall别以为跟VC的fastcall就相同了, 完全不同的, DELPHI的self是用EAX传递的, VC的this, 好像是用ECX传递的. 最安全的做法是都采用stdcall3. VC下, 类函数指针有使用, 要自己显式声明和显式调用(用(this->)XXX), DELPHI的成员函数, 都可以由TMethod代替, 用法当然是DELPHI的方便得多了. 但要实现VC和DELPHI的成员函数能够相互调用, 则必须要写stdcall. 不用stdcall 得要自己写汇编代码调用函数.4. DELPHI下, 要注意其RTTI信息的编译, DELPHI的self指针下, 除了虚表, 还有RTTI信息表, 还有类继承信息表, 这些信息, 会有编译选项可以开启或关闭, 默认下开启, 这样导致VC里面某些类的使用会造成不同的写法.