如何让Delphi在hpp文件中发出函数和过程定义?

时间:2014-03-26 08:26:04

标签: delphi c++builder

我正在尝试在C ++ Builder项目中使用Delphi函数(因为ImageEn的IEVision组件没有可用于提取条形码的C ++接口,所以我需要在Delphi单元中提取条形码)

我创建了一个C ++ Builder项目,并添加了一个Delphi单元,其完整代码为:

unit Unit2;

interface

implementation
function MyOutput : String ;
begin
  Result := 'hello';
end;

end.

我以C ++形式使用该单元:

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String result = MyOutput();
}

生成的.hpp是:

// CodeGear C++Builder
// Copyright (c) 1995, 2013 by Embarcadero Technologies, Inc.
// All rights reserved

// (DO NOT EDIT: machine generated header) 'Unit2.pas' rev: 26.00 (Windows)

#ifndef Unit2HPP
#define Unit2HPP

#pragma delphiheader begin
#pragma option push
#pragma option -w-      // All warnings off
#pragma option -Vx      // Zero-length empty class member 
#pragma pack(push,8)
#include <System.hpp>   // Pascal unit
#include <SysInit.hpp>  // Pascal unit

//-- user supplied -----------------------------------------------------------

namespace Unit2
{
//-- type declarations -------------------------------------------------------
//-- var, const, procedure ---------------------------------------------------
}   /* namespace Unit2 */
#if !defined(DELPHIHEADER_NO_IMPLICIT_NAMESPACE_USE) && !defined(NO_USING_NAMESPACE_UNIT2)
using namespace Unit2;
#endif
#pragma pack(pop)
#pragma option pop

#pragma delphiheader end.
//-- end unit ----------------------------------------------------------------
#endif  // Unit2HPP

请注意,MyOutput函数的声明不包含在.hpp文件中。如何让Delphi将该函数放入.hpp

1 个答案:

答案 0 :(得分:4)

生成的头文件仅包含接口部分的符号。您只在实现部分中声明了该函数。也无法从Delphi代码调用该函数。

您还必须在界面部分声明该功能,以使其对其他单位可见。

unit Unit2;

interface

function MyOutput : String ;

implementation

function MyOutput : String ;
begin
  Result := 'hello';
end;

end.