我收到了一些与其他开发者分享的代码。我有一个很好的调试模块,我通过单元测试,但他没有这个,所以这是一个不断添加和删除代码的战斗。
如果有一种方法我们可以使用条件(很像Delphi版本或Unicode),那会很好吗
{$IfDef MYComponent}
MyComponent := TMyComponent.Create;
MyComponent.Logging := true;
{$EndIf}
我想我可以将我的ide设置为Define something,但我想知道是否有办法检测组件是否已安装......
答案 0 :(得分:10)
试试这个(自Delphi 6以来应该适用于所有版本):
{$IF DECLARED(TMyComponent)}
{$IFEND}
然后,您只需更新您的使用列表即可使该组件可见。
答案 1 :(得分:2)
您可以让他使用仅具有存根实现的组件单元。例如:
type
TMyComponent = class
procedure DoSomething();
end;
procedure TMyComponent.DoSomeThing();
begin
//no-op
end;
如果您想使用不同的单位名称,可以使用位于项目选项中的Delphi中的单位别名选项 - >目录和条件 - >单位别名:为单位UnitMyComponent添加别名 - > UnitDummyMyComponent。
您现在可以使用至少ifdef free的代码!
答案 2 :(得分:0)
不完全是ifdefs,但您可以使用类继承和针对已分配的测试来查看是否应该执行操作。您仍然希望进行某种代理设置,以便您和其他开发人员都可以编译...只是您的版本具有代理的附加目标。例如:
在“共享”单元中,两个开发人员都会这样:
type
TMyComponent = class
public
procedure DoSomething; virtual;
end;
var
MyComponent : TMyComponent;
procedure TMyComponent.DoSomething;
begin
// stubbed
end;
在“特殊”单元中,您将获得以下代码:
type
TMyRealComponent = Class(tMyComponent)
public
procedure DoSomething; override;
end;
procedure TMyRealComponent.DoSomething;
begin
// do the real process here
end;
initialization
MyComponent := TMyRealComponent.Create;
finalization
if Assigned(MyComponent) then
MyComponent.Free;
end.
在您的代码中,当您想要查看是否可以执行某些操作时,您可以编写:
if Assigned(MyComponent) then
MyComponent.DoSomething;
如果要禁用此调试代码,请从项目中删除特殊单元。