在德尔福中使用C++类



如何在德尔福使用C++类?我正在尝试通过抽象类使用它。但是它没有按预期工作,我从Age();那里得到了奇怪的数字.

德 尔 福:

program Test;
{$APPTYPE CONSOLE}
type
  IPerson = class
    function Age(): Integer; overload; virtual; stdcall; abstract;
    procedure Age(const Value: Integer); overload; virtual; stdcall; abstract;
  end;
const
  DLL = 'Interface.DLL';
procedure FreePerson(const Person: IPerson); external DLL;
function CreatePerson(): IPerson; external DLL;
var
  Person: IPerson;
  I: Integer;
begin
  Person := CreatePerson;
  Person.Age(10);
  I := Person.Age(); // I is not 10?
end.

C++:

extern "C" class _declspec(dllexport) IPerson
{
    virtual void Age(const int Value) = 0;
    virtual int Age() = 0;
};

class Person: public IPerson
{
private:
    int FAge;
public:
    void Age(const int Value){FAge = Value;};
    int Age(){return FAge;};
    Person(){ FAge = 0; };
    ~Person(){};
};

extern "C" _declspec(dllexport) IPerson* CreatePerson()
{
    return new Person;
}
extern "C" _declspec(dllexport) void FreePerson(Person** obj)
{
    delete obj;
}

您无法与 Delphi 中的C++类互操作。事实上,只有使用相同的编译器和运行时,您才能从C++合理地做到这一点。

若要在 C++ 和 Delphi 之间进行互操作,需要做的是使用 COM 公开C++类。如果 COM 不是一个选项,则平展类是替代方法。Rudy Velthuis在这里介绍了这些选项: http://rvelthuis.de/articles/articles-cppobjs.html

最新更新