我突然注意到TDataModuleTestExchange(nil)我们的代码库中有一个'构造函数调用':
procedure TDialoogConfigExchange.ButtonTestClick(Sender: TObject);
var
lDataModuleTestExchange: TDataModuleTestExchange;
lResult : Boolean;
begin
inherited;
[snip]
begin
lDataModuleTestExchange := TDataModuleTestExchange(nil); // *** HERE ***
try
lResult := lDataModuleTestExchange.GetCalendarFolder(EditHost.Text,EditGebruiker.Text,EditWachtwoord.Text);
if lResult then
ToonMelding(sExchangeTestGelukt, mtInformation, [mbOk])
else
ToonMelding(Meldingen.Text, mtError, [mbOK]);
finally
lDataModuleTestExchange.Free;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
所以,而不是TDataModuleTestExchange.**Create**(nil)这个工作就好了!
unit dmTestExchange;
interface
uses
System.SysUtils, System.Classes,
Xml.XMLDoc, Xml.XMLIntf, Xml.XMLDOM,
TimeTellDM;
type
TDataModuleTestExchange = class(TTimeTellDataModule) // TDataModule descendant
private
public
function GetCalendarFolder(const AExchangeServerURL,AExchangeLoginName,AExchangePass: String): Boolean;
end;
Run Code Online (Sandbox Code Playgroud)
没有编译器错误,没有运行时问题.怎么会?
从D2007转换为XE2,我转换了这个功能
function Add_Line( FileStream : TFileStream; ALine : string) : boolean;
Run Code Online (Sandbox Code Playgroud)
至
function Add_Line( FileStream : TFileStream; ALine : string; Enc: TEncoding = nil) : boolean;
var
AStr: ANSISTring;
begin
Result := True;
if Enc = nil then Enc := TEncoding.ANSI;
try
//Old FileStream.WriteBuffer( Pointer(ALine)^, Length(ALine) );
if Enc = TEncoding.UTF8 then
AStr := UTF8Encode(ALine)
else
AStr := ANSIString(ALine);
FileStream.WriteBuffer( AStr[1], Length(ALine) );
end;
except
Result := False;
end;
end;
Run Code Online (Sandbox Code Playgroud)
理由:
尽可能少地使用Add_Line更改代码
接受自动更改为Unicode,仅在最后时刻写入8位文本文件(这在XML和CSV中使用).如果我们想要的话,未来我们仍然可以转向UTF-16文件.
我本来希望定义类似的东西:
function Add_Line( FileStream : TFileStream; ALine …Run Code Online (Sandbox Code Playgroud) 我不小心碰到空格键并写了这个:
lTTEvent .CustUpdateStatus := usUnchanged;
Run Code Online (Sandbox Code Playgroud)
并且惊讶地发现编译器接受了点前面的空间(实际上,任意数量的空格).
点是否是解析器可以正确解释它的特殊字符?如何在Pascal中工作?
我希望将ISO时间格式转换为yyyy-mm-dd hh:mm:ss.SSS.但是我无法实现转换.我刚接触猪,我试图编写一个udf来处理从ISO格式到yyyy-mm-dd hh:mm:ss.SSS的转换.
请指导我,我尝试了猪的内置功能(FORMAT,DATE_FORMAT)但是无法将数据转换为所需的格式.
当前数据格式:2013-08-22T13:23:18.226220 + 01:00
所需数据格式:2013-08-22 13:23:18.226
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.EvalFunc;
import org.joda.time.DateTime;
import org.joda.time.format.*;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.DateTimeFormatterBuilder;
public class test extends EvalFunc<String>{
public String exec(Tuple input) throws IOException {
if ((input == null) || (input.size() == 0))
return null;
try{
String time = (String)input.get(0);
DateFormat dt = new SimpleDateFormat ("yyyy-mm-dd hh:mm:ss.SSS");
Date d_t = dt.parse(time);
String timedt = getTimedt(d_t);
return timedt;
} catch (ParseException …Run Code Online (Sandbox Code Playgroud) 我的Delphi Tokyo 10.2.1 IDE刚刚崩溃.重启时我得到提示:
RAD Studio已恢复以下文件.保存你想要保留的那些.
文件比较显示,此时文件__recovery确实是最新版本,但尚未恢复任何内容
(注意:特定文件未在IDE中重新打开,因为崩溃阻止IDE将其注册为打开file.此文件所属的项目甚至不是项目组中的当前项目,原因相同).
该对话框只有一个关闭按钮.我可以选择那个文件.我开始测试几种变化.
无论我是否选择它,单击关闭后,Delphi会要求丢弃剩余的恢复文件?.
__recovery保持不变__recovery文件夹的数量会再次触发IDE警告.我无法测试进一步的变化.IDE现在不断清除__recovery文件夹.这有点乱.恢复不起作用吗?对话文本是否不清楚?
我期望从这样的对话框中出现以下行为:
有谁知道(f)究竟发生了什么?我该怎么办(选择/回答)?
我在网上找不到答案.
因为现在我留下了一个未恢复的文件和一个空__recovery文件夹.幸运的是我做了备份.
目前我们使用TWebBrowser组件将 IE 嵌入到我们的桌面应用程序中。为了从在嵌入式浏览器中运行的脚本调用 Delphi 代码,我们实现了对window.external对象的支持,如下所述:http : //www.delphidabbler.com/articles/article-22
现在,出于多种原因,我们需要切换到现代浏览器。我们已经升级到 Delphi 10.4,它引入了新TEdgeBrowser组件(基于 Chromium 的 MS Edge)。是否也可以使用window.externalfor TEdgeBrowser?如果是这样,如何?或者还有其他方法如何从嵌入式浏览器中的脚本调用本机代码?
我正在使用Delphi XE.
以下单元无法使用此错误进行编译:
[DCC Error] GTSJSONSerializer.pas(27): E2506 Method of parameterized type declared
in interface section must not use
local symbol 'TSuperRttiContext.AsJson<GTSJSONSerializer.TGTSJSONSerializer<T>.T>'
Run Code Online (Sandbox Code Playgroud)
这是为什么?有解决方法吗?
unit GTSJSONSerializer;
interface
type
TGTSJSONSerializer<T> = class
class function SerializeObjectToJSON(const aObject: T): string;
class function DeserializeJSONToObject(const aJSON: string): T;
end;
implementation
uses
SuperObject
;
class function TGTSJSONSerializer<T>.SerializeObjectToJSON(const aObject: T): string;
var
SRC: TSuperRttiContext;
begin
SRC := TSuperRttiContext.Create;
try
Result := SRC.AsJson<T>(aObject).AsString;
finally
SRC.Free;
end;
end;
class function TGTSJSONSerializer<T>.DeserializeJSONToObject(const aJSON: string): T;
var
LocalSO: ISuperObject;
SRC: TSuperRttiContext;
begin
SRC …Run Code Online (Sandbox Code Playgroud) 在Delphi XE2中,我正在对收到的XML文件进行xslt转换,以删除所有命名空间信息.
问题:它改变了
<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)
成
<?xml version="1.0" encoding="utf-16"?>
Run Code Online (Sandbox Code Playgroud)
这是我从Exchange服务器返回的XML:
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="14" MinorVersion="0" MajorBuildNumber="722" MinorBuildNumber="0" Version="Exchange2010" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m:ResolveNamesResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:ResolveNamesResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:ResolutionSet TotalItemsInView="1" IncludesLastItemInRange="true">
<t:Resolution>
<t:Mailbox>
<t:Name>developer</t:Name>
<t:EmailAddress>developer@timetellbv.nl</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
<t:MailboxType>Mailbox</t:MailboxType>
</t:Mailbox>
<t:Contact>
<t:Culture>nl-NL</t:Culture>
<t:DisplayName>developer</t:DisplayName>
<t:GivenName>developer</t:GivenName>
<t:EmailAddresses>
<t:Entry Key="EmailAddress1">SMTP:developer@timetellbv.nl</t:Entry>
</t:EmailAddresses>
<t:ContactSource>ActiveDirectory</t:ContactSource>
</t:Contact>
</t:Resolution>
</m:ResolutionSet>
</m:ResolveNamesResponseMessage>
</m:ResponseMessages>
</m:ResolveNamesResponse>
</s:Body>
</s:Envelope>
Run Code Online (Sandbox Code Playgroud)
这是删除命名空间信息的函数:
Uses
MSXML2_TLB; // IXMLDOMdocument
class function TXMLHelper.RemoveNameSpaces(XMLString: String): String;
const
// An XSLT script …Run Code Online (Sandbox Code Playgroud) 我有这个输入文件(1 =有效,0 =无效)
a 1
a 0
b 1
b 1
b 0
c 0
c 0
c 0
c 0
.
.
.
Run Code Online (Sandbox Code Playgroud)
并希望输出如下:
X repeats active count inactive count
a 2 times 1 1
b 3 times 2 1
c 4 times 0 4
Run Code Online (Sandbox Code Playgroud)
我试过了:
awk -F "," '{if ($2==1) a[$1]++; } END { for (i in a); print i, a[i] }'file name
Run Code Online (Sandbox Code Playgroud)
但那没用.
我怎样才能获得输出?
我在Delphi webservice中使用OpenSSL与HTTPS连接的可用密码有点混淆.
建立:
问题:我的web服务(与OpenSSL结合)是否必须做/可以做什么来影响 app和webservice之间TLS握手的可用密码?是否还需要使用OpenSSL设置其他内容?
我认为答案是'不',即它只是服务器设置(在通过Android/iOS与应用程序握手)确定从可用服务器使用哪个密码.这是正确的假设吗?或者我会错过什么?
(作为事实上,我不是在限制或扩大现有的密码真正感兴趣,但客户坚持的东西"应该做的",在/与web服务/ OpenSSL的将它传达"安全"与应用程序.该SSLLabs测试表明他们的域只支持TLS 1.0和使用RSA密钥交换机制的密码,所以例如没有Perfect Forward Secrecy.对我来说,这看起来像是需要修复的东西).
笔记:
这个问题表明我可能需要做点什么,但它没有答案.
我发布了一个早先有点相关的问题,但这没有答案.
这篇SO帖子指出OpenSSL在SSL握手过程中尊重客户端的密码偏好,而不是服务器的密码偏好,这再次表明我可以做些什么?
我怀疑这个问题是否在这里适当的位置(也是因为我们不支持客户),但由于这可能与更多程序员有关,所以我决定把它放在SO上.
delphi ×8
delphi-xe2 ×4
apache-pig ×1
arrays ×1
awk ×1
constructor ×1
datamodule ×1
delphi-xe ×1
encoding ×1
generics ×1
https ×1
ide ×1
if-statement ×1
iso ×1
java ×1
linux ×1
openssl ×1
pascal ×1
superobject ×1
tedgebrowser ×1
unicode ×1
utf-16 ×1
utf-8 ×1
web-services ×1
xslt ×1