小编Pau*_*aul的帖子

Ruby - while语句中的否定条件

RubyMine在此警告我负面情况:

while !open_socket do
    sleep 1
end
Run Code Online (Sandbox Code Playgroud)

我知道这unless是相反的if,但与之相反的是while什么?

ruby while-loop conditional-statements

2
推荐指数
1
解决办法
637
查看次数

Delphi中对象委托的共同祖先

对于使用of object子句声明的Delphi委托,是否有一些共同的祖先?

我需要为TNotifyEvent和我的自定义委托找到一个共同的祖先:

TMyEvent = procedure(Sender: TObject; msg: stringh); of object;
Run Code Online (Sandbox Code Playgroud)

制作用于触发这些事件的通用方法.

我应该使用指针吗?还是TObject?

delphi delegates ancestor

2
推荐指数
1
解决办法
345
查看次数

git submodule 分支是否与主项目的分支一起切换?

最近我开始了解 git 子模块。它们似乎是自给自足的项目,拥有自己的 git 结构和分支。

当我切换主项目的分支时,这是否也会切换子模块的分支?git 如何处理这种情况?

git git-submodules git-branch

2
推荐指数
1
解决办法
1611
查看次数

优化NULL/NOT NULL标志PostgreSQL查询

我试图得到一个包含布尔标志的记录:如果特定结果集中的列至少有一个NOT NULL值,则为true;如果所有值都为NULL,则为false.

结果集的示例数据

SELECT "my column 1", "my column 2", "my column 3", "my column 4", "my column 5" 
FROM my_data 
WHERE date BETWEEN :start AND :end

"my column 1" "my column 2" "my column 3" "my column 4" "my column 5"
   NULL          NULL          25.2          NULL          1.12
   15.28         NULL          NULL          NULL          2.25
   NULL          NULL          13.9          NULL          3.03
   359.00        NULL          125.5         NULL          4.15
   NULL          NULL          152.2         NULL          5.99
   NULL          NULL          NULL          NULL          6.35
Run Code Online (Sandbox Code Playgroud)

在这种情况下,结果应该是:

"my column 1" "my column 2" "my …
Run Code Online (Sandbox Code Playgroud)

postgresql

2
推荐指数
1
解决办法
107
查看次数

获取可比较的 PostgreSQL 版本号

我需要确保可用的 PostgreSQL 版本不低于所需版本。可以按如下方式请求版本字符串:

SELECT VERSION();
Run Code Online (Sandbox Code Playgroud)

它返回给我类似的东西:

PostgreSQL 9.5.4,由 Visual C++ build 1800 编译,64 位

理论上我可以解析这个字符串,但我不确定 PostgreSQL 服务器的未来版本是否会保留这个词序。

PostgreSQL 是否有一些可预测的版本报告可能分为主要版本号和次要版本号?

versioning postgresql

2
推荐指数
1
解决办法
1574
查看次数

无法覆盖TCollection.Notify:Notify声明与之前的声明不同

注意:其他问题的标题不同,这使其无法识别为匹配的标题.

System.Classes

TCollection = class(TPersistent)
protected
  procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); virtual;
end;
Run Code Online (Sandbox Code Playgroud)

MyUnit

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
  Vcl.ExtCtrls, DB, System.Generics.Collections;

TTextDisplayLineInfos = class(TCollection)
protected
  procedure Notify(Item: TCollectionItem; Action: TCollectionNotification); override; //Here "[dcc32 Error] MyUnit.pas(85): E2037 Declaration of 'Notify' differs from previous declaration"
end;

implementation

procedure TTextDisplayLineInfos.Notify(Item: TCollectionItem;
  Action: TCollectionNotification);
begin
  inherited; //Here "[dcc32 Error] MyUnit.pas(475): E2008 Incompatible types"
  //..............
end;
Run Code Online (Sandbox Code Playgroud)

Notify方法的签名是通过复制粘贴进行的,因此不会出现任何错误;

错误

在界面部分:

[dcc32错误] MyUnit.pas(85):E2037"通知"声明与之前的声明不同

在实施部分:

[dcc32错误] MyUnit.pas(475):E2008不兼容的类型

题 …

delphi tcollection

2
推荐指数
1
解决办法
182
查看次数

退出 RTTI 相关函数后发生访问冲突:结果消失

以前我有一个函数可以通过 RTTI 获取对象属性并设置它的值。现在我决定将其拆分为TRTTI.GetObjPropTRTTI.SetObjPropValue,以便缓存返回的值TRTTI.GetObjProp并加快数据处理速度。

之后发生了奇怪的事情。首先,我突然注意到它ctx.GetType有效并且一直有效,尽管我从未初始化过该ctx变量。好吧,如果我用 初始化它TRttiContext.Create(),第二个奇怪的地方没有任何变化:

我调用该TRTTI.GetObjProp函数,只要我在该函数中,Result就已定义,并且我可以使用调试器请求它的属性。当我退出该函数时,我尝试请求rprop变量的相同属性并收到访问冲突错误。根据调试器,rprop已定义。

procedure TConfManager._setValue(indicator: TComponent; name: string; value: OleVariant);
var
  rprop: TRttiProperty;
begin
  rprop := TRTTI.GetObjProp(indicator, name);
  //Access violation here when I try to use rprop
  TRTTI.SetObjPropValue(indicator, rprop, value);
end;

class function TRTTI.GetObjProp(obj: TObject; propName: string): TRttiProperty;
var
  ctx: TRttiContext;
  rtyp: TRttiType;
begin
  if obj = nil then Exit(nil);
  rtyp := ctx.GetType(obj.ClassType);
  Result := rtyp.GetProperty(propName);
end; …
Run Code Online (Sandbox Code Playgroud)

delphi rtti

2
推荐指数
1
解决办法
309
查看次数

引用属性写入中的公共setter

我可以引用一个共同的制定者_setTerm在性write访问,而无需编写单独的setter方法_setTerm1,_setTerm2,_setTerm3

TAdder = class(TCalculatorComponent)
private
  _terms: array[1..10] of OleVariant;
  procedure _setTerm(const i: Integer; const Value: OleVariant);
  procedure _setTerm1(const Value: OleVariant);
  procedure _setTerm2(const Value: OleVariant);
  procedure _setTerm3(const Value: OleVariant);
  .......
public
  constructor Create(AOwner: TComponent); override;
  property Term1: OleVariant read _terms[1] write _setTerm1;
  property Term2: OleVariant read _terms[2] write _setTerm2;
  property Term3: OleVariant read _terms[3] write _setTerm3;
  .......
end;

implementation

procedure TAdder._setTerm(const i: Integer; const Value: OleVariant);
begin
  _terms[i] := TVarConv.NullableFloat(Value);
  _calculate(); …
Run Code Online (Sandbox Code Playgroud)

arrays delphi setter

2
推荐指数
1
解决办法
115
查看次数

通过RTTI将TDateTime值传递给OleVariant属性

当我分配一个TDateTime值,以OleVariant使用RTTI的对象的属性,对象变为浮点值.

对象的设计使得此属性可以变为Null或任何数据类型的值.如果它变为浮点数,则应将结果计算为浮点数的差值.如果变为TDateTime,则应将结果计算为两个TDateTime值的差值.

我是否已将值直接传递给它,它会正常工作,但中间有RTTI.

我知道TDateTime内部重新设置为float,但有可能接收到我发送的数据类型吗?

请看tkVariant以下代码示例中的案例:

class procedure TRTTI.SetObjPropValue(obj: TObject; rprop: TRttiProperty; value: OleVariant);
var
  rtyp: TRttiType;
  vt: TVarType;
begin
  if obj = nil then Exit();
  if (rprop <> nil) and (rprop.IsWritable) then begin
    case rprop.PropertyType.TypeKind of
      tkInteger, tkInt64:
        begin
          value := TVarConv.NullableCurr(value);
          if VarIsNumeric(value) then rprop.SetValue(obj, TValue.FromVariant(Trunc(value)));
        end;
      tkFloat:
        begin
          if rprop.PropertyType.Name = 'TDateTime' then
            value := TVarConv.NullableDateTime(value)
          else
            value := TVarConv.NullableFloat(value);
          if not VarIsNull(value) then rprop.SetValue(obj, TValue.FromVariant(value)); …
Run Code Online (Sandbox Code Playgroud)

delphi datetime rtti variant

2
推荐指数
1
解决办法
101
查看次数

在Delphi中捕获MSVCR120丢失的错误消息

我编写了一个无人值守的HTTPS上传客户端,该客户端不需要用户交互。

一切都是完美无缺的,直到我盲目地将其部署到没有远程桌面访问权限的远程系统上。该工具在日志中报告说缺少SSL库。

好吧,我部署LIBEAY32.dllSSLEAY32.dll远程系统上的应用程序文件夹,但随后的工具挂,我无法弄清楚发生了什么事情,直到我写了一个工具,这使得远程屏幕截图。

在屏幕截图上,我看到了来自csrss.exe过程的模态窗口,并显示了一条消息:

该程序无法启动,因为您的计算机缺少MSVCR120.dll。

尽管有很多try except块和Application.OnException处理程序,窗口还是出现了。

我希望在这种情况下,应用程序不会被搁置,因此可以向日志报告失败。

如何实现呢?

在当前的实现中,TIdHttp.Post调用只是挂起。

PS我通过将DLL复制到应用程序文件夹中解决了DLL的缺失,但是我的问题是捕获此类错误。

delphi ssl exception-handling msvcr120.dll

2
推荐指数
1
解决办法
204
查看次数