在Delphi中使用C ++类

时间:2014-12-27 11:48:06

标签: delphi delphi-xe7

如何在Delphi中使用C ++类?我试图通过抽象类使用它。然而,它并没有按预期工作,我从Age();获得了奇怪的数字。

的Delphi:

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;
}

1 个答案:

答案 0 :(得分:4)

您无法与Delphi的C ++类互操作。实际上,如果使用相同的编译器和运行时,只能从C ++合理地完成它。

在C ++和Delphi之间进行交互,你需要做的是使用COM公开你的C ++类。如果COM不是一个选项,那么扁平化类是另一种选择。 Rudy Velthuis在这里介绍了这些选项:http://rvelthuis.de/articles/articles-cppobjs.html