小编Jer*_*ers的帖子

Delphi编译器错误E2064左侧无法分配

我继承了一个Delphi应用程序,我对object pascal一无所知.

这是我需要编译到新版本的C++ Builder XE中的BPL.
当我运行make时,我得到错误:

E2064左侧无法分配.

我已经学会了足够多的obj pascal知道我有一个试图被赋值的常量.

但是,显然,你可以克服这种行为; 通过进入Delphi编译器下的Build选项并打开"Assignable Typed constants",实质上将常量转换为vars.

我这样做了,我继续得到同样的错误.

我尝试用{$ J +}和{$ J-}​​包围我的代码,但仍然无法编译.

procedure TChunkIDAT.CopyInterlacedRGB8(const Pass: Byte;
  Src, Dest, Trans{$IFDEF Store16bits}, Extra{$ENDIF}: pChar );
var
  Col: Integer;
 begin
 {Get first column and enter in loop}
 Col := ColumnStart[Pass];
 Dest := pChar(Longint(Dest) + Col * 3);
 repeat
 {Copy this row}

  Byte(Dest^) := fOwner.GammaTable[pByte(Longint(Src) + 2)^]; inc(Dest);
Run Code Online (Sandbox Code Playgroud)

在最后一行获取错误.如果我将const更改为var,那么我会得到声明与前一个声明不同但我不知道前一个声明在哪里的错误....

delphi unicode c++builder delphi-xe

4
推荐指数
1
解决办法
5732
查看次数

Delphi 2010:任何人都能获得格式化程序的正确设置,不能折叠匿名方法吗?

使用默认设置,Delphi 2010代码格式化程序在一行上折叠匿名方法.

是否有人找到设置来规避这个?

原始代码:

procedure TUnit.AppendFinalization(const StringBuilder: TStringBuilder);
begin
  AppendMemberResults(StringBuilder,
    function(Member: TGeneratableInUnit): IStringListWrapper
    begin
      Result := Member.FinalizationText;
    end
  );
end;

procedure TUnit.AppendMemberResults(const StringBuilder: TStringBuilder; const GetMemberText: TFunc<TGeneratableInUnit, IStringListWrapper>);
Run Code Online (Sandbox Code Playgroud)

格式化代码:

procedure TUnit.AppendFinalization(const StringBuilder: TStringBuilder);
begin
  AppendMemberResults(StringBuilder, function(Member: TGeneratableInUnit): IStringListWrapper begin Result := Member.FinalizationText; end);
end;

procedure TUnit.AppendMemberResults(const StringBuilder: TStringBuilder; const GetMemberText: TFunc<TGeneratableInUnit, IStringListWrapper>);
Run Code Online (Sandbox Code Playgroud)

如您所见,匿名方法被格式化为一行.

我觉得我在这里缺少某种设置.

delphi delphi-2010

3
推荐指数
1
解决办法
432
查看次数

Delphi:尽管在开始之后设置了返回值,但返回值可能是未定义的

任何人都可以告诉我为什么我得到"返回值......可能未定义"这里:

function TXMLAcceptorBCOLSubmission.createRecordsInBCFEEPAR(AXML: TRipXMLElement): String;
var
  ...
begin
  Result := '';
Run Code Online (Sandbox Code Playgroud)

delphi delphi-5

3
推荐指数
1
解决办法
736
查看次数

加载有效的Windows-1252文档时出错"系统错误:-2146697210"

不知何故,有时下面的代码在加载有效的Windows-1252 XML时会产生错误.

它在使用MSXML6的Windows XP Professional x86 SP3上失败.
它在使用MSXML6的Windows 7 Ultimate x64 SP1上取得了成功.

注意:下面的代码是用Delphi编写的,但是在其他环境中,等效代码也会失败.

procedure TXMLEOSErrorTestCase.Test;
var
  XmlDocument: IXMLDOMDocument3;
  XmlFileName: string;
begin
  XmlDocument := CoFreeThreadedDOMDocument60.Create();
  XmlFileName :=  TPath.Combine(TPath.GetDirectoryName(ParamStr(0)), '1-Normal.xml');
  if not XmlDocument.load(XmlFileName) then
    Parse(XmlDocument.parseError);
end;
Run Code Online (Sandbox Code Playgroud)

在XmlDocument.load方法期间发生此错误:

reason: System error: -2146697210.
errorCode: -2146697210
url: C:\temp\1-Normal.xml
Run Code Online (Sandbox Code Playgroud)

我将XML修剪为下面的XML.

这是XML文件的十六进制转储:

000000: 3C 3F 78 6D 6C 20 76 65  72 73 69 6F 6E 20 3D 20 <?xml version =
000010: 22 31 2E 30 22 20 65 6E  63 6F 64 69 6E 67 …
Run Code Online (Sandbox Code Playgroud)

msxml msxml6

3
推荐指数
1
解决办法
9307
查看次数

德尔福从哪里获得BDSCOMMONDIR的价值?

我的一个系统有一个破坏的Delphi安装:它认为BDSCOMMONDIR指向,C:\Windows\system32\9.0而在一个正常运行的系统,它指向C:\Users\Public\Documents\RAD Studio\9.0.

我可能是企业安全性疯狂的受害者,因为我发现C:\Users\Public无论如何都没有人可以访问失败系统上的目录.

我想要的是将目录的内容移动到开发人员可以编写的位置,然后全局(C:\ProgramData想到一个子目录)并全局设置BDSCOMMONDIR.

那么:Delphi BDSCOMMONDIR从哪里获得价值?
我怎样才能覆盖它?

它阻止我的主要原因是我现在在我尝试的每个编译/构建中得到这个:

[MakeDir Error] Unable to create directory "C:\Windows\system32\9.0\hpp\". Access to the path 'C:\Windows\system32\9.0\hpp\' is denied.
[MakeDir Error] Unable to create directory "C:\Windows\system32\9.0\Dcp". Access to the path 'C:\Windows\system32\9.0\Dcp' is denied.
[MakeDir Error] Unable to create directory "C:\Windows\system32\9.0\hpp". Access to the path 'C:\Windows\system32\9.0\hpp' is denied.
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe2

3
推荐指数
1
解决办法
3367
查看次数

在icecast服务器的xslt实现中检测node-set()函数的可用性

的Icecast包含基于一个XSLT实现的libxsltxmlsoft

我想知道它是否支持node-set()函数,最好以一种也适用于其他纯网络环境的方式:

遗憾的是,icecast 中的XSLT 处理器只能通过icecast 进程的Web 界面进行Web 访问(因此命令行上没有xsltproc)。更糟糕的是:XSLT 错误的日志记录有限(当你做错事时,icecast 进程通常会死掉)。

我正在运行 icecast 2.3.2,因为它是基于 Windows最新版本(目前还没有用于 Windows 的 2.3.3 版本),其中 libxslt.dll 的日期是 2008 年。DLL 中没有版本号,我是最好的可以提供的是这个(见底部的 XSLT 代码):

Version:    1.0
Vendor:     libxslt
Vendor URL: http://xmlsoft.org/XSLT/
Run Code Online (Sandbox Code Playgroud)

我尝试运行David Carlisle 的博客文章“如何以独立于平台的方式使用节点集功能? ”指向的 EXSLT 节点集功能中提到的节点集检测。

从输出来看,我认为失败了:

icemaster@localhost972990localhost00EarthIcecast 2.3.2Sun, 23 Jun 2013 20:02:19 W. Europe Daylight Time202200ice-samplerate=44100;ice-bitrate=64;ice-channels=264StationGenre6424410000http://localhost:8000.....
Run Code Online (Sandbox Code Playgroud)

通过 Web 界面中的 XSL 文件进行查找的最佳方法是什么?

版本脚本:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  <xsl:output method="text" encoding="UTF-8" …
Run Code Online (Sandbox Code Playgroud)

xslt node-set

3
推荐指数
1
解决办法
1246
查看次数

PowerShell 中 Format-Table cmdlet 的最大列数是多少

我正在使用Format-Table编写一个在列中发出输出的脚本,并且不能显示超过 9 个(无论有没有-AutoSize参数)。

以防万一这不是我的错,只是一些未记录的事情:

Format-Table可以显示的最大列数是多少?

如果它未绑定,我将从我的脚本中提取一个小的可重现案例。

我正在使用 PowerShell 4.0,并创建要列出的对象,如下所示:

    New-Object PSCustomObject -Property ([Ordered] @{
        "BDS #" = $bdsVersion
        "HKCU" = $hkcuBasePath
        "HKLM" = $hklmBasePath
        "Name" = $fullName
        "CompilerVersion" = $compilerVersion
        "RTLVersion" = $rtlVersion
        "Define" = $define
        "Characterset" = $characterSet
        "Architectures" = $architecture
        "Frameworks" = $framework
        "DllSuffix" = $dllSuffix
    })
Run Code Online (Sandbox Code Playgroud)

DllSuffix即使我的控制台窗口足够宽(300 个字符宽),该列也不会显示。

编辑

按照建议Cole9350,我加入了-Wrap-AutoSize参数来设置表的格式,但它仍然失败:

function Get-BDS-ProductSummaries {
    $bdsVersions = Get-BDS-Versions
    $bdsVersions | ForEach-Object { 
        $summary …
Run Code Online (Sandbox Code Playgroud)

powershell powershell-4.0

3
推荐指数
1
解决办法
6890
查看次数

用户列表中的循环单元引用是否可以在delphi中进行?


我正在将一些C头文件翻译成Delphi.
在这些头文件中,两个文件彼此共享它们的结构.
当我在Delphi中尝试这个时,它给了我循环引用错误.
所以我目前正在单个.pas文件中编写两个头文件的翻译.
有没有其他方法来解决这个问题?

这是一个小例子.
实际的头文件比较复杂:

== == File1.h

struct a
{
int data;
}
int compare(struct a,struct b);
Run Code Online (Sandbox Code Playgroud)

== == File2.h

struct b
{
int data;
}
int compare(struct A,struct b);
Run Code Online (Sandbox Code Playgroud)

== == File1.pas

uses File2;
type
  a = packed record
    data: Integer;
  end;

compare = function(d1: a; d2: b): Integer; cdecl;
Run Code Online (Sandbox Code Playgroud)

== == File2.pas

uses File1;
type
  b = packed record
    data: Integer;
  end;

compare = function(d1: a; d2: b): Integer; cdecl;
Run Code Online (Sandbox Code Playgroud)

c delphi

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

从Delphi 2005升级到2010 libeay32.dll

我正在将我的程序从Delphi 2005升级到Delphi 2010.我遇到了RSA功能问题

以下程序在D2005下运行良好,但在D2010中,结果始终为零.我已经尝试使用新版本的libeay32.dll

function ReadPrivateKey(AFileName: TFileName): pEVP_PKEY;
var
  keyfile: pBIO;
  a : pEVP_PKEY;
begin
  a := nil;
  keyfile := BIO_new(BIO_s_file());
  BIO_read_filename(keyfile,   PAnsiChar(AFilename));
  result := PEM_read_bio_PrivateKey(keyfile, a, nil, nil);
  if result = nil then
  begin
    raise Exception.Create('Não foi possível ler a chave privada.');
  end;
  BIO_free(keyfile);
end;
Run Code Online (Sandbox Code Playgroud)

有人有这个问题吗?谢谢山姆

delphi unicode rsa delphi-2010

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

如果存在git index.lock,我可以安全地删除它,还是需要更多动作来验证完整性?

在过去的几周里,我得到了一条关于index.lock存在几次的消息.

删除该文件在git index.lock中作为解决方案提到 我尝试提交时存在文件,但无法删除该文件

是否正在删除该文件,或者是否需要执行其他操作(有没有办法验证完整性等等?).

这是在安装了git命令行工具,TortoiseGIT和SourceTree的Windows x64系统(完全修补)上.

windows git

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