拿这个小示例类(不是我的真实代码,但它暴露了问题):
Convert = class(TObject)
public
class function ToString(value: Double): String; overload;
class function ToString(value: TDateTime): String; overload;
end;
Run Code Online (Sandbox Code Playgroud)
它会编译好,直到您尝试使用Double或TDateTime函数As In:
var
d: Double;
begin
d := 99.99;
ShowMessage(Convert.ToString(d));
Run Code Online (Sandbox Code Playgroud)
您将收到此编译错误:对'ToString'的不明确的重载调用.问题归结为这TDateTime是一种类型的事实Double
我的问题:你如何处理这类问题?
编辑 - 我不是在寻找给出的例子的解决方案
到目前为止我找到了3个解决方案:
那里有其他解决方案吗?
采取以下情况:
procedure Test;
var
Response : String;
begin
Response := IdHttp.Post(MyUrL, AStream);
DoSomethingWith(Response);
end;
Run Code Online (Sandbox Code Playgroud)
现在,web服务器以UTF-8返回数据.假设它返回一些包含字符é的 UTF-8 XML .如果我使用变量Response它不包含这个字符,但它是UTF-8变种(#C3#A9),所以Indy没有解码?
现在我知道如何解决这个问题:
procedure Test;
var
Response : String;
begin
Response := UTF8ToString(IdHttp.Post(MyUrL, AStream));
DoSomethingWith(Response);
end;
Run Code Online (Sandbox Code Playgroud)
这个解决方案的一个警告:Delphi引发警告W1058(隐式字符串转换,潜在的数据丢失从'string'到'RawByteString')
我的问题:这是处理这个问题的正确方法,还是我可以指示TIdHTTP为我转换为UnicodeString?
Delphi XE,Windows 7 64位
当您向空应用程序添加语言支持时,您将收到内存泄漏(FastMM4).
如何重现:
ReportMemoryLeaksOnShutdown := True;FastMM4完整调试模式报告:
--------------------------------2013/7/16 14:54:34--------------------------------
A memory block has been leaked. The size is: 12
This block was allocated by thread 0x17EC, and the stack trace (return addresses) at the time was:
40455E
40952D
4094C8
409834
409941
450058
74548D76 [Unknown function at FirstHookFunc]
7778FA1A [ZwOpenKey]
75924033 [OpenRegKey]
759240AE [OpenRegKey]
777FA71A [Unknown function at RtlUlonglongByteSwap]
The block is currently used for …Run Code Online (Sandbox Code Playgroud) 昨天,当我忙于使用SQLLite编写一些单元测试时,我偶然发现了这个问题.我的环境是Windows7/Delphi XE.
将TADOQuery与TDateTime参数结合使用会导致时间部分丢失.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ADODb, DateUtils, DB;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var DbConn : TADOConnection;
Qry : TADOQuery;
DT : TDateTime;
begin
DBConn := TADOConnection.Create(nil);
DBConn.ConnectionString := 'Provider=MSDASQL.1;Extended Properties="DRIVER=SQLite3 ODBC Driver;Database=:memory:;LongNames=0;Timeout=1000;NoTXN=0;SyncPragma=NORMAL;StepAPI=0;"';
// DBConn.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=True;User ID=%0:s;Password=%1:s;Extended Properties="DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;PORT=3306;DATABASE=test;USER=root;PASSWORD=rrr;OPTION=1048579"';
Qry := TADOQuery.Create(nil); …Run Code Online (Sandbox Code Playgroud) 我是一个新的ASP.NET开发人员,我正在开发一个基于Web的应用程序,其中有一个菜单栏,有很多选项.其中一些选项仅显示给管理员.系统背后有一个逻辑来检查用户是否是管理员.如果是,将显示选项.我写了这个方法,但我有一个sql injectiom,我想删除它.
为了您的信息,我有以下数据库设计:
NetID, Name, TitleID, NetID这是C#方法:
private bool isAdmin(string username)
{
string connString = "Data Source=appSever\\sqlexpress;Initial Catalog=TestDB;Integrated Security=True";
string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = '" + NetID + "')";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
// Open DB connection.
using (SqlCommand cmd = new SqlCommand(cmdText, conn))
{
SqlDataReader reader = cmd.ExecuteReader();
if (reader != null)
if (reader.Read())
if (reader["ID"].Equals(1))
return true;
return false;
}
}
} …Run Code Online (Sandbox Code Playgroud) 考虑 h225 Ras 注册请求 (RRQ) 的 Wireshark 跟踪:

正如你所看到的,Wireshark解码requestSeqNum为25601,但字节表示是0x6400,即25600。我查看了ASN.1 PER编码规则,但我找不到该值必须增加1的原因。我的问题,wireshark 是否正确解码这个,如果是,我在规范中哪里可以找到它?
ASN.1 代码:
RequestSeqNum ::= INTEGER (1..65535)
Run Code Online (Sandbox Code Playgroud)
事实上,Wireshark 始终requestSeqNum对所有 h225 消息加 1。
我有一个通过TWebBrowser加载网页的应用程序,在这个页面上我有一些HTML输入.我想要的是更改输入的值并将插入位置设置为结尾.
这就是我现在所拥有的:
procedure SetInputValue(Document : IHTMLDocument2; const ElementId, NewValue : String);
var Doc : IHTMLDocument3;
El : IHTMLElement;
begin
Doc := Document as IHTMLDocument3;
if Assigned(Doc) then
begin
El := Doc.getElementById(ElementId);
if Assigned(El) then
begin
if El.tagName = 'INPUT' then
(El as IHTMLInputElement).Value := NewValue;
(El as IHTMLInputElement).select;
end;
end;
end;
Run Code Online (Sandbox Code Playgroud)
这段代码设置输入值并突出显示文本部分.我知道IHTMLInputTextElement2接口,但它只能从IE9获得
使用Indy10 - DelphiXE.如何告诉我连接的telnet服务器TIdTelnet不回显我发送给telnet服务器的命令?
这是我目前的尝试(不起作用),我尝试在每次telnet写入时发送序列IAC DO SUPPRESS_LOCAL_ECHO,但我相信这必须在协商阶段完成?
uses
TIdTelnet,
...
procedure TIOTelnetConnection.SendSupressEcho;
var
Resp: TIdBytes;
begin
SetLength(Resp, 3);
Resp[0] := TNC_IAC;
Resp[1] := TNC_DO;
Resp[2] := TNO_SUPLOCALECHO;
FIOConnection.IOHandler.Write(Resp);
end;
procedure TIOTelnetConnection.Write(Str: AnsiString);
begin
SendSupressEcho;
if Str <> '' then
FIOConnection.IOHandler.Write(Str);
end;
Run Code Online (Sandbox Code Playgroud)
看TIdTelnet源我看到Negotiate程序,但它受到保护,我怎样才能覆盖它的行为?
我正在研究delphiXE2,我正在研究PInteger.如果我在我的delphi代码中这样做
var
P: PInteger;
testInt: Integer;
Scores: array[0..4] of Integer=(33,44,56,78,78);
begin
P := @Scores;
testInt := (P+1)^;
WriteLn(testInt);
ReadLn;
end;
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误.
[DCC Error] Project1.dpr(23): E2015 Operator not applicable to this operand type
Run Code Online (Sandbox Code Playgroud)
PS:testInt := (P+1)^;是第23行
但是,当我尝试这个
var
PCh: PChar;
testchar: char;
str: array[0..4] of char=('a','b','c','d','e');
begin
PCh := @str;
testchar := (PCh+1)^;
WriteLn(testchar);
ReadLn;
end;
Run Code Online (Sandbox Code Playgroud)
它运作良好!控制台可以打印'b'!
我不清楚这是怎么发生的,什么时候((指针)(P)+1)^可以工作?
我有一个问题,访问到网站whit utf8 charset,例如当我尝试在这个www的accesso
所有utf8字符都没有正确编码.这是我的访问例程:
var
Web : TIdHTTP;
Sito : String;
hIOHand : TIdSSLIOHandlerSocketOpenSSL;
begin
Url := TIdURI.URLEncode(Url);
try
Web := TIdHTTP.Create(nil);
hIOHand := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
hIOHand.DefStringEncoding := IndyTextEncoding_UTF8;
hIOHand.SSLOptions.SSLVersions := [sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2,sslvSSLv2,sslvSSLv3,sslvSSLv23];
Web.IOHandler := hIOHand;
Web.Request.CharSet := 'utf-8';
Web.Request.UserAgent := INET_USERAGENT; //Custom user agent string
Web.RedirectMaximum := INET_REDIRECT_MAX; //Maximum redirects
Web.HandleRedirects := INET_REDIRECT_MAX <> 0; //Handle redirects
Web.ReadTimeOut := INET_TIMEOUT_SECS * 1000; //Read timeout msec
try
Sito := Web.Get(Url);
Web.Disconnect;
except
on e : exception do
Sito := 'ERR: ' …Run Code Online (Sandbox Code Playgroud)