小编Cha*_*ang的帖子

如何恢复初始git提交?

我第一次承诺使用git存储库; 然后我后悔提交并想要还原它.我试试

# git reset --hard HEAD~1
Run Code Online (Sandbox Code Playgroud)

我收到这条消息:

fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree.
Run Code Online (Sandbox Code Playgroud)

此提交是存储库的第一次提交.知道如何撤消git的初始提交吗?

git

311
推荐指数
7
解决办法
8万
查看次数

Git快进VS没有快进合并

Git merge允许我们执行快进和没有快速快进分支合并.有什么想法何时使用快进合并以及何时不使用快进合并?

git

227
推荐指数
3
解决办法
10万
查看次数

Git子模块的替代品?

我觉得使用Git子模块对于我的开发工作流程来说有点麻烦.我听说过Git子树和Gitslave.

  • 是否有更多工具用于多个存储库项目以及它们如何比较?
  • 这些工具可以在Windows上运行吗?

git-submodules git-subtree git-slave git-repo git-subrepo

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

BcdDivide函数在Delphi XE和XE2中表现不同

FmtBcd.pas已经在Delphi XE2中进行了大量修改.在我的一个项目中,我有一个案例对两个Bcd值使用除法运算,但这两个版本产生不同的结果.在最坏的情况下,Delphi XE2可能会抛出一个Bcd overflow error.

示例:在Delphi XE2控制台应用程序中运行以下代码:

var A, B, C, D: TBcd;
begin
  A := StrToBcd('1');
  B := StrToBcd('3');
  BcdDivide(A, B, C);
  WriteLn(BcdToStr(C));

  try
    BcdMultiply(C, C, D);
    WriteLn(BcdToStr(D));
  except
    on E: Exception do
      WriteLn(E.Message);
  end;

  ReadLn;
end.
Run Code Online (Sandbox Code Playgroud)

以上输出将是:

0.333333333333333333333333333333333333333333333333333333333333333
BCD overflow
Run Code Online (Sandbox Code Playgroud)

该变量C包含一个Bcd值,具有63个小数位的特异性.BcdMultiply对变量执行第二次操作C将导致a Bcd overflow error.

但是,要在Delphi XE中运行相同的代码,会产生以下结果,而不会出现任何异常提示:

0.3333333333
0.11111111108888888889
Run Code Online (Sandbox Code Playgroud)

有人可以建议一个解决这个问题的最佳实践方法吗?

delphi delphi-xe delphi-xe2

67
推荐指数
1
解决办法
1518
查看次数

Delphi XE2:可以在VCL应用程序中实例化FireMonkey表单吗?

在Delphi XE2之前,我们只使用VCL来创建GUI应用程序.Delphi XE2声明:

警告:FireMonkey(FMX)和可视组件库(VCL)不兼容,不能在同一项目或应用程序中使用.也就是说,应用程序必须只有一个或另一个,FireMonkey或VCL.不兼容性是由FireMonkey(FMX)和VCL之间的框架差异引起的.

我的应用程序是一个使用运行时包构建的纯VCL应用程序.所有VCL表单都存储在运行时包中.如果我要创建一个FireMonkey表单并存储在一个包中,我是否有机会在运行时在我的VCL应用程序中实例化这个FireMonkey表单?所以我可能会喜欢FireMonkey的3D或HD效果.

delphi vcl delphi-xe2 firemonkey

24
推荐指数
3
解决办法
8263
查看次数

使用DataExplorer.exe连接到本地DBX4驱动程序时遇到错误

我在Delphi 2010 for Firebird数据库中编写了自己的DBX 4.驱动程序是一个dynalink驱动程序,它可以与TSQLConnection一起使用.

最近,我尝试使用Delphi 2010发布的DataExplorer.exe并遇到错误:

"Attempted to read or write protected memory.
 This is often an indication that other memory is corrupt".
Run Code Online (Sandbox Code Playgroud)

跟踪源代码后,我发现以下导出方法可能是导致问题的原因:

function DBXLoader_GetDriver(Count: TInt32; Names, Values: TWideStringArray;
  ErrorMessage: TDBXWideStringBuilder; out pDriver: TDBXDriverHandle):
  TDBXErrorCode; stdcall;
Run Code Online (Sandbox Code Playgroud)

调试此方法时,"名称和值"参数包含损坏的值.我不知道是什么原因造成的.也许DataExplorer.exe存在一些内存管理器问题(.net问题?)

经过一些试验和错误后,我尝试将方法更改为:

type
  TWideStringArray2 = array of PChar;

function DBXLoader_GetDriver(Count: TInt32; Names, Values: TWideStringArray2;
  ErrorMessage: TDBXWideStringBuilder; out pDriver: TDBXDriverHandle):
  TDBXErrorCode; stdcall;
Run Code Online (Sandbox Code Playgroud)

这一次,错误消失了,在退出此方法后不久,同样的错误再次引发

"Attempted to read or write protected memory.
This is often an indication that other memory is corrupt".
Run Code Online (Sandbox Code Playgroud)

你有什么想法可能导致问题的原因吗?

delphi dllimport

23
推荐指数
1
解决办法
663
查看次数

内存泄漏发生在嵌套的匿名方法中

在Delphi XE中,以下代码将导致内存泄漏:

procedure TForm1.Button1Click(Sender: TObject);
var P, B: TProc;
begin
  B := procedure
       begin
       end;

  P := procedure
       begin
         B;
       end;
end;
Run Code Online (Sandbox Code Playgroud)

运行代码

ReportMemoryLeaksOnShutdown := True;
Run Code Online (Sandbox Code Playgroud)

和内存管理器提示:

21-28 bytes: TForm1.Button1Click$ActRec x 1
Run Code Online (Sandbox Code Playgroud)

delphi memory-leaks anonymous-methods

15
推荐指数
2
解决办法
1164
查看次数

Delphi 2007和XE2:使用NativeInt

自Delphi XE2以来,NativeInt具有新的含义.在32位运行时,NativeInt是32位整数.在64位运行时,NativeInt是64位整数.

我有一些使用第三方DLL(32位和64位)的源文件.这些DLL分别在32和64平台上使用32位和64位整数.

这些源文件在Delphi 2007 - Delphi XE2 32位平台上运行时没有问题:

例如:

function Test: Integer;
Run Code Online (Sandbox Code Playgroud)

当我尝试将这些源文件迁移到Delphi XE2 64位平台时,上述功能不再有效,因为它需要64位整数.为了使源可以同时适用于32/64平台,我改为

function Test: NativeInt;
Run Code Online (Sandbox Code Playgroud)

它有效.

但是,声明在Delphi 2007中不起作用,因为Delphi 2007将NativeInt视为64位整数:SizeOf(NativeInt)= 8

我可以通过使用条件指令RtlVersion或CompilerVersion来解决问题

function Test: {$if CompilerVersion<=18.5}Integer{$else}NativeInt{$ifend};
Run Code Online (Sandbox Code Playgroud)

但由于源文件中有许多声明,这将是乏味的.

有没有更好的方法使源文件在Delphi 2007-XE2 win32和XE2 win64平台上运行?

delphi delphi-2007 delphi-xe2

14
推荐指数
1
解决办法
8974
查看次数

在Delphi XE5编译设置中,"有限调试信息"和"调试信息"之间有什么区别

用于Win32的Delphi XE5编译器具有调试信息的新设置:有限调试信息.

有限调试信息调试信息有什么区别?

delphi delphi-xe5

14
推荐指数
1
解决办法
468
查看次数

如何将重载的类方法分配给匿名方法?

在Delphi中,我们可以将一个类方法(声明为procedure of object)分配为匿名方法类型的参数。

对于重载的方法(相同的方法名称),传递对象方法失败并出现编译错误:

[dcc32 Error] Project56.dpr(40): E2010 Incompatible types: 'System.SysUtils.TProc<System.Integer,System.Integer>' and 'Procedure of object'
Run Code Online (Sandbox Code Playgroud)

以下示例显示了这种情况。是否可以让重载的方法作为匿名方法参数传递?

type
  TTest = class
  public
    procedure M(a: Integer); overload;
    procedure M(a, b: Integer); overload;
  end;

procedure TTest.M(a, b: Integer);
begin
  WriteLn(a, b);
end;

procedure TTest.M(a: Integer);
begin
  WriteLn(a);
end;

procedure DoTask1(Proc: TProc<Integer>);
begin
  Proc(100);
end;

procedure DoTask2(Proc: TProc<Integer,Integer>);
begin
  Proc(100, 200);
end;

begin
  var o := TTest.Create;
  DoTask1(o.M);  // <-- Success
  DoTask2(o.M);  // <-- Fail to compile: E2010 Incompatible types: 'System.SysUtils.TProc<System.Integer,System.Integer>' and …
Run Code Online (Sandbox Code Playgroud)

delphi

14
推荐指数
1
解决办法
385
查看次数