小编War*_* P的帖子

如何将CD作为文件读取?

我想知道在Delphi中是否可以直接从逻辑磁盘驱动器设备"C:\"读取CD作为原始流.

如果我已经有一个有效的文件句柄,我希望我可以使用TFileStream.

delphi cd

11
推荐指数
1
解决办法
554
查看次数

我可以修改RTL类System.Classes.TStream中的常量并在运行时在Delphi XE6中重建它吗?

我正在尝试解决System.Classes.pas中一个已知的丑陋性能限制,它具有20世纪80年代的常量缓冲区限制($ F000),如下所示:

function TStream.CopyFrom(const Source: TStream; Count: Int64): Int64;
const
  MaxBufSize = $F000;
....
Run Code Online (Sandbox Code Playgroud)

这导致我们的Delphi应用程序遭受重大性能损失.在delphi XE2到XE5中,我们能够修改它并使用以下方法之一:

  • 我可以修改Delphi源代码,然后通过从批处理文件调用dcc32.exe,重建Delphi库文件夹中的System.Classes.dcu文件.我意识到这很难看,我不喜欢这样做,但我不喜欢RTL中这个丑陋的性能问题,而且我们的用户无法忍受它带来的性能问题.

  • 我可以尝试在我的项目搜索路径中的某处放置一个经过修改的system.classes.pas文件.

现在,在Delphi XE6中,上述两种方法都不适合我,这可能要归功于一些内部编译器的更改.我在其uses子句中包含System.Contnrs的最小命令行应用程序中得到的错误是:

[dcc32 Fatal Error] System.Classes.pas(19600): F2051 Unit System.Contnrs was compiled with a different version of System.Classes.TComponent
Run Code Online (Sandbox Code Playgroud)

重现此问题的示例程序(假设您已修改了System.Classes.pas并更改了MaxBufSize常量),如下所示:

program consoletestproject;

{$APPTYPE CONSOLE}

{$R *.res}

uses
   System.Contnrs,
   System.SysUtils;

var
  List:System.Contnrs.TObjectList;
begin
   WriteLn('Hello world');
end.
Run Code Online (Sandbox Code Playgroud)

同样,这个问题在Delphi XE6中很容易重现,但在XE5或更早版本中不是问题.

当您绝对必须使用System.Classes.pas或System.SysUtils.pas或其他一些非常低级别单元的修改副本解决基本RTL或VCL限制时,建议的做法是什么?(是的,我知道如果你不必这样做,你就不应该这样做,不要为讲课而烦恼.)

是否有一组神奇的命令行参数可以通过命令行中的"dcc32.exe"使用,以生成一个修改后的DCU,它将与上面的应用程序示例正确链接?

作为第二个问题,是否有.dcu文件没有源存在,当一个人尝试这样做时会破坏,在这种情况下,上述所有的答案是,"你无法解决这个问题,如果有一个bug在RTL中,你运气不好"?

一种可能的解决方法是在项目搜索路径(或库路径)中包含"$(BDS)\ source\rtl\common",强制每个损坏的(需要重新编译)DCU重建每个时间,但这看起来很丑陋和错误.

delphi delphi-xe6

11
推荐指数
2
解决办法
957
查看次数

.NET Core 1.0中的System.Environment

有谁知道如何在.NET Core中获取有关当前环境和平台的信息?目前Core库中没有Environment类.

在此输入图像描述

.net c# .net-core

11
推荐指数
1
解决办法
4965
查看次数

从VS2015发布后,DNX Web命令抛出"无法解决项目"错误

这是关于.net核心的过时预发布版本.

我已经使用visual studio 2015的beta /预览创建了预发布ASP.Net 5(后来改名为asp.net core)的基本项目,我已将项目发布到文件系统并尝试运行它从那里使用命令

    dnx . web
Run Code Online (Sandbox Code Playgroud)

结果的错误是"无法解决项目".我已经检查过dnvm正在使用默认框架.我发布的目录包含web,web.cmd,wwwroot和approot文件夹.还有什么我应该检查的吗?

我正在使用:asp.net core 1.0.0-beta4 clr

asp.net dnx dnvm

11
推荐指数
1
解决办法
6183
查看次数

我可以在EntityFramework Core 1.0 rc2中配置拦截器吗?

在本博文中所示的实体框架6中,有一种方法可以配置一个拦截器,它可以记录所有慢速查询,包括堆栈回溯.

2015年的一个问题是关于之前称为EF7的测试版的早期测试结果,这表明在asp.net vnext早期测试版中它还不可能.

然而,EF Core的整个设计是可组合的,并且在这里讨论github bug跟踪器时,你可能有一种技术可以将一些低级类子类化SqlServerConnection,然后在那里覆盖一些方法,以获得一些你可以挂钩的点在执行查询之前和之后,如果执行了毫秒计时器值,则添加一些低级别日志记录.

这仍然是必要的,也是EF Core 1.0.0-rc2-final中的唯一技术(目前截至2016年6月)?

c# entity-framework-core visual-studio-2015

11
推荐指数
2
解决办法
6516
查看次数

检测.net核心2.0

在dotnet core 2.0控制台应用程序中,输出:

Console.WriteLine("Hello World from "+ System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription);
Run Code Online (Sandbox Code Playgroud)

是一个意想不到的价值:

Hello World from .NET Core 4.6.00001.0
Run Code Online (Sandbox Code Playgroud)

有没有办法以编程方式检测.net core 2.0或更高版本,而不是2.0之前的.net核心平台?我意识到在大多数情况下你可能不应该这样做.但是在你确实需要这样做的奇怪情况下,你会怎么做?

c# .net-core .net-core-2.0

11
推荐指数
1
解决办法
548
查看次数

在delphi中使用UIntToStr来显示UINT64值,但StrToUInt在哪里允许用户输入64位无符号值?

我想将一个大的64位值从十进制或十六进制字符串转换为64位UINT64数据类型.有一个UIntToStr可以帮助将UINT64转换为字符串,但没有办法将64位整数转换为无符号值,作为字符串.这意味着使用RTL不能用十进制或十六进制表示大于2**63的整数值.这通常不是什么大问题,但是可能发生用户需要输入一个值,作为无符号整数,必须作为64位无符号整数值存储到注册表中.

procedure HandleLargeHexValue;

var
 x:UINT64;
begin

  x := $FFFFFFFFFFFFFFFE;

  try
  x := StrToInt('$FFFFFFFFFFFFFFFF'); // range error.
  except
    x := $FFFFFFFFFFFFFFFD;
  end;

  Caption := UintToStr(x);

end;
Run Code Online (Sandbox Code Playgroud)

Update Val现在可以在Delphi XE4及更高版本中正常运行.在XE3及以下Val('$ FFFFFFFFFFFFFFFF')有效,但不是Val('9223372036854775899').正如Roeland在Quality Central 108740中指出的那样:在Delphi XE4之前,System.Val在十进制中存在大的UInt64值问题.

delphi delphi-xe

10
推荐指数
1
解决办法
3216
查看次数

Delphi中的SOAP客户端"句柄处于所请求操作的错误状态"

我在visual studio中构建了世界上最笨拙,最简单的SOAP服务器,大约3次点击.Visual Studio 2010中的确切步骤:首先将新项目创建为Web应用程序,然后添加Web服务类型的新项目.(有关图片,请参阅此处接受的答案.)soap服务器服务Service1有一个简单的方法GetData:

来自clientService1.pas的片段,使用WSDL导入器创建...

  IService1 = interface(IInvokable)
  ['{967498E8-4F67-AAA5-A38F-F74D8C7E346A}']
    function  GetData(const value: Integer): string; stdcall;
    function  GetDataUsingDataContract(const composite: CompositeType2): CompositeType2; stdcall;
  end;
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此方法时,如下所示:

procedure TForm3.Button1Click(Sender: TObject);
var
 rio : THTTPRIO;
 sv:IService1;
 addr : string;
 data : string;
begin
    //addr := '....'; // url from visual studio 2010 live debug instance.
    rio := THTTPRIO.Create(nil);
    sv := GetIService1( true, addr, rio );
    try
        data := sv.GetData(  0);

        Button1.Caption := data;

    finally
        sv := nil;

        rio.Free;
    end;
 end;
Run Code Online (Sandbox Code Playgroud)

我得到的错误是这样的:

ESOAPHTTPException: 
 The …
Run Code Online (Sandbox Code Playgroud)

delphi soap delphi-xe

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

是否有任何Delphi工具或加载项可用于帮助重构非面向对象的代码?

我有一个很大的代码库,我正在使用它有这样的单位:

unit myformunit;

interface
type
  TMyForm = class(Form)
  end;

  procedure not_a_method1;

  procedure not_a_method2;

  var
     global1,global2,global3:Integer;
  ...
Run Code Online (Sandbox Code Playgroud)

简而言之,代码的作者没有编写方法,他们编写了全局程序.有成千上万的人.在这些过程中,它们引用了单个实例MyForm:TMyForm.

我正在考虑编写一个解析器/重写器实用程序,它将把这个代码变成"至少是面向对象的代码".策略是将接口和实现部分全局变为表单,作为开始.我意识到这不是优雅的OOP.但这是全球化的一步.

如果我一次可以在一个单元上执行此操作,我可能能够修复项目其余部分的破损,如果我一次只能在一个表单上执行此操作.但我想,以减少而不是做手工的时候需要重写单位的金额.有些表单有500多个过程和500多个接口和实现全局变量,实际上,这些变量特定于它们与同一单元中的单个表单实例的状态.

基本上,如果没有这样的话,我会做的就是编写一个基于Castalia Delphi解析器的解析器.我希望也许ModelMakerCodeExplorer,或者castalia,或其他类似的工具有一些东西至少可以做我需要的一部分,所以我不必自己构建这个实用程序.即使我必须建立它自己,我估计它可能会自动大约有一千至2000小时咕噜工作的我.我至少可以运行它,然后看看有多少中断,然后在我决定重构这段代码的努力之后还原或提交.

实现相同目标的替代策略(从零封装和零OOP,到更多封装,稍微超过零OOP,以增量方式,在大型非结构化delphi代码库上,仅在不可避免的情况下使用对象,并且永远不会对真正的OOP有任何想法,欢迎.

delphi oop refactoring encapsulation

10
推荐指数
1
解决办法
388
查看次数

ASP.NET Core 1 RC2 Web应用程序入口点

所以他们改变了他们在asp.net 5 rc1和rc2之间引导web应用程序的方式.

它曾经是:

public static void Main(string[] args) => WebApplication.Run<Startup>(args);
Run Code Online (Sandbox Code Playgroud)

但在RC2中,我不再引用静态类WebApplication.有任何想法吗?

asp.net web-applications asp.net-core

10
推荐指数
2
解决办法
3530
查看次数