这是一个有点复杂的场景-在实践中甚至更加复杂,但是针对这个问题,我设法将其最小化。
我定义了两个Delphi包:BasePackage.dpk和AnotherPackage.dpk
package BasePackage;
requires
rtl;
contains
Base in 'Base.pas';
end.
和
package AnotherPackage;
requires
BasePackage;
contains
Another in 'Another.pas';
end.
和单位
unit Base;
interface
type
TMethod = procedure;
TEncodeableType = record
Method: TMethod;
end;
PEncodeableType = ^TEncodeableType;
procedure Method_Impl;
const
TestMethod_Type: TEncodeableType = (
Method: Method_Impl;
);
implementation
procedure Method_Impl;
begin
end;
end.
和
unit Another;
interface
uses
Base;
implementation
const
ResponseType: PEncodeableType = @TestMethod_Type;
end.
一切都可以正常编译,我什至可以使用'dcc32 -JPHNEK --BCB'
生成基本的C ++ Builder单元,但是当我尝试使用'dcc32 -JPHNEK --BCB -JL'
为C ++ Builder生成库文件时,我得到了>
>dcc32 -JPHNEK --BCB -JL BasePackage.dpk
Embarcadero Delphi for Win32 compiler version 32.0
Copyright (c) 1983,2017 Embarcadero Technologies, Inc.
BasePackage.dpk(10)
11 lines, 0.09 seconds, 3688 bytes code, 176 bytes data.
>dcc32 -JPHNEK --BCB -JL AnotherPackage.dpk
Embarcadero Delphi for Win32 compiler version 32.0
Copyright (c) 1983,2017 Embarcadero Technologies, Inc.
AnotherPackage.dpk(10)
Error: E2201 Need imported data reference ($G) to access 'TestMethod_Type' from unit 'Another'
我尝试使用不同的编译选项(当然,将{$G+}
或{$IMPORTEDDATA ON}
引入到单元和软件包中(尽管这是默认设置),但是还没有看到它们有什么不同
在.cfg中编译软件包时不包含任何选项或具有以下选项:
-$A+
-$B-
-$C-
-$D-
-$E-
-$F-
-$G+
-$H+
-$I-
-$J-
-$K-
-$L+
-$M-
-$N+
-$O+
-$P+
-$Q-
-$R-
-$S-
-$T+
-$U-
-$V-
-$W-
-$X+
-$Y-
-$Z1
-cg
-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
-H+
-W+
-M
-$M16384,1048576
-K$00300000
-Z
,并且在.dpk中不包含任何选项或具有以下选项:
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS ON}
{$RANGECHECKS ON}
{$REFERENCEINFO OFF}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST ON}
{$MINENUMSIZE 1}
{$IMAGEBASE $300000}
{$DESIGNONLY}
{$IMPLICITBUILD OFF}
您知道我是否可以完成这项工作(我真的需要其他软件包中的功能)吗?
我一直在使用Delphi 10.2 Tokyo和XE4进行编译,结果相同。
答案 0 :(得分:0)
我认为这是一个编译器问题,因此可能无法完全解决我的情况。但是,我可以声明变量而不是常量的映射(实际上,我内部有几个这样的内部结构)。
因此,此版本的Another.pas可以编译并运行:
unit Another;
interface
uses
Base;
implementation
var
ResponseType: PEncodeableType;
initialization
ResponseType := @TestMethod_Type;
end.