小编Mik*_*lor的帖子

int*i和int*i之间的区别

我正在将用C编写的DLL的头文件转换为Delphi,因此我可以使用DLL.

我的问题是有什么区别

int* i
Run Code Online (Sandbox Code Playgroud)

int *i
Run Code Online (Sandbox Code Playgroud)

我将第一个转换为

i: PInteger;
Run Code Online (Sandbox Code Playgroud)

但我不确定Delphi中第二个转换的正确转换.

从我的理解,第一个是一个简单的类型指针.第二个是指针变量.但我不确定区别是什么.

c delphi

32
推荐指数
4
解决办法
2万
查看次数

TIdHTTPServer是否与Microsoft BITS兼容

我们正在尝试使用TIdHTTPServer组件为我们的软件编写更新服务器.目前我们正在提供一个XML文件,列出可用的更新及其文件版本等.当客户端程序找到更新版本时,它应该开始使用BITS下载它.

现在这是我们遇到问题的地方,我们的程序正在请求XML文件并看到有可用的更新.然后它创建一个BITS作业来下载它,但是BITS一直报告下载失败.我们可以使用相同的URL和IE/Firefox/Chrome下载文件.

所以我的问题:

TIdHTTPServer与BITS兼容吗?

我问这个,因为我发现有一些工作的下载要求.
BITS下载的HTTP要求

BITS支持HTTP和HTTPS下载和上传,并要求服务器支持HTTP/1.1协议.对于下载,HTTP服务器的Head方法必须返回文件大小,其Get方法必须支持Content-Range和Content-Length标头.因此,除非ASP,ISAPI或CGI脚本支持Content-Range和Content-Length标头,否则BITS仅传输静态文件内容并在尝试传输动态内容时生成错误.

BITS可以使用HTTP/1.0服务器,只要它符合Head和Get方法要求即可.

要支持下载文件范围,服务器必须支持以下要求:

允许MIME标头包含标准的Content-Range和Content-Type标头,以及最多180个字节的其他标头.在HTTP标头和第一个边界字符串之间最多允许两个CR/LF.

delphi http indy httpserver microsoft-bits

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

如何让Windows SCM在失败时重启我的服务

我有一些我用delphi编写的Windows服务,它们通常工作得很好,但有时我会得到一个可以被视为致命的异常抛出.当发生这种情况时,该服务旨在停止.

我的问题是如何以这样的方式退出服务,即SCM将自动尝试重新启动服务.(我已经在服务管理器中设置了服务的恢复选项)

MSDN声明

如果服务终止而未向服务控制器报告SERVICE_STOPPED状态,则认为该服务失败.

我已阅读此博客文章使用Windows服务的自动恢复功能,但我不知道如何在delphi中实现这一点.

我已经尝试了以下几点

  • 将TService的ErrCode属性设置为非零值.
  • 将ServiceStop事件的已停止参数设置为false.
  • 在servicestop事件处理程序中引发异常.

编辑2013-08-06添加了代码示例

现在代码更新以显示工作示例

这是我正在使用的代码,

procedure TTestService.ServiceExecute(Sender: TService);
begin

  while not (Terminated or FFatalError) do
  begin
    ServiceThread.ProcessRequests(False);
    ReportStatus;
    Sleep(100);
  end;

  if FFatalError then
   Halt(1);

end;
Run Code Online (Sandbox Code Playgroud)

FFatalError是TTestService类上的私有布尔字段,在启动时初始化为false,如果工作线程(在TTestService.ServiceStart事件中启动)以致命异常终止,则它仅设置为true.

这是工作线程的OnTerminate事件处理程序.

procedure TTestService.ThdTerm(Sender: Tobject);
var
  E : Exception;
  Thread : TThread;
begin
  Thread := TThread(Sender);

  if (Thread.FatalException <> nil) then
  begin
    E := Exception(Thread.FatalException);
    GetExcCallStack(E);

    EventLog.LogError(Thread.ClassName + ': ID:'+ IntToStr(Thread.ThreadID) +
      ' Stopped Unexpectedly!, '+ NEWLINE + E.ClassName +': ' + E.Message);
    FFatalError := …
Run Code Online (Sandbox Code Playgroud)

windows delphi service

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

有谁可以识别这种编码?

我正在开发一个程序来与一些硬件接口,这些硬件正在发送已编码和包装的数据,以便在XML文档中的CDATA块内发送.

据我所知,设备中的软件是用Python编写的,我在Delphi中编写接口.

设备发送的数据是这个

\ x00E\X18\X10\X14}*UF!A\X81 \西飞\ X08&\ X02\X01 \n\X15\X1A\xc2PP\X92\X17\XC2\XC 1\XA0\x0e\X1A\XC2\xd0K\x94 \'\ x830\x11\x8b\x84a_\xa0 +\x04\x81\x17\x89\x15D\x91B\x05.\ x84\xf1\x1b\x89%E\x00\x04\x9c\x0e\xc5\xc1 = \的x87\x0bE\xf18\X07\X1F\xc8a\xa5\X95\x08H\X80?\ X84\X18\TPK\x8a $ \吨\ XF1\XB2\x8e(j\XB0\X08\X91\x1eJ\xf0W\x0c-\x0b\xf0\x0e\x88\x07\x0c\x00\x9b \n\x910Z\x06!\ x92\xf0W\x073S\x08\x87\xff\xff\xff\xf0\x0e\xff\xff\xff\xff\xff\xff\xff\xffe\xba\xff\xff\xff\xf4C\xed\xbb\xb9_\xffDD1\r\xcb\xbaw\xf5TD2\xed\xbb\xba\x88EUDB\x0c\XBA \的Xaa\x99UUDB\X0C\XBA \的Xaa\xa9UUD2\r\XBB \的Xaa\xaaUTD2\r\XCB\XBB\xaaUTC!\ r\XCB\XBB\xbbUD3!\ x0e\XDC\XBB\xbbDD3!\ x0e\XDC\XCC\xbbDC2!\ x0e\XDC\XCC\xcc33 "\ X11\x0e\XDD\XCC\xccC3"\X11\x0e \固定的\ XDC\XCC\xf33!\ X10\x0e\XEE\XDD\XCC\xf32!\ X10\x0e\XEE\XDD\XDC\xff2!\ X10\X00\XEE\XEE\XDD\XFF\XF2!\ X11\X00\x0e\XEE\XDD\XFF\XF2!\ X11\X10\x0e\XEE\XEF\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X0 0\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00\X00

我需要能够将类似的数据发送回设备,但我所拥有的格式是这样的

0x451C0E148A4A65781B0291080E1644B0680B340580A28615C9001E8F1EC9F0559D260A4147901A0AF16D93304BC09A8523CC513E25218CA00CD42C0CE137891FCDB02397054DD07C04124E112408158E5124841E0ED17F8E28CEE12C96284F511B231C8FB07C1228D09079BD31D090960B2050B075871CD1217B8D171131830B3552509A8E295271621D2E9271AD972ED371AB93FFFCDFFFFFFFFFFFFCDDFFFFFFFFFFBCCDE0122FFFFFBCCDE01123FFFBBBCDE011234FFAABCDE001233FFAABCCE001234FFAAABCDE01234FFAAABCDE01234FFAAAABCE01344FAAA99ABE12344FAAA99ABE124555FAA99AAC044555FAA9999A96655FFAA9989998765FFAA98899BB855FFAA9999ABBD45FFAA9999ABCD34FAAA999AABCD345FAAA999BBCD33F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

我知道\ x通常用于表示ascii字符,使用2位数字对的十六进制值,但查看数据并非如此.我很难确定使用的编码,制造商没有提供太多帮助.

我想知道的是如何将我所拥有的十六进制转换为他们在Delphi xe4中使用的格式?

BTW这两个块不包含相同的数据,但它是相同类型的数据,即格式相同,只是不同的编码

正在发送的数据示例

POST ******** HTTP/1.1 Host: 172.16.1.136:8080 Accept-Encoding: identity Content-Length: 1552 Content-Type: text/xml Authorization: 1344354:PASS User-Agent: *********

<?xml version="1.0" encoding="utf-8"?> <Biometrics>   <Templates>
     <Template badge="1075" readerType="6" index="6" ts="2014-11-06T17:28:40.000+01:00" chk="3a6a4924ec04e668186b15e244e6fe73">   <![CDATA[     ['1075_6',
1415294920.3754971, [0, 0], [['3\x04\x00\x00\x00P\x00\x00E\x18\x10\x14}*UF!A\x81\xac\x08&\x02\x01\n\x15\x1a\xc2PP\x92\x17\xc2\xc1\xa0\x0e\x1a\xc2\xd0K\x94\'\x830\x11\x8b \x84a_\xa0+\x04\x81\x17\x89\x15D\x91B\x05.\x84\xf1\x1b\x89%E\x00\x04\x9c\x0e\xc5\xc1=\x87\x0bE\xf18\x07\x1f\xc8a\xa5\x95\x08H\x80?\x84\x18\tPK\x8a$\t\xf1\xb2\x8e(J\xb0\x08\x91\x1eJ\xf0W\x0c-\x0b\xf0\x0e\x88\x07\x0c\x00\x9b\n …
Run Code Online (Sandbox Code Playgroud)

python delphi escaping character-encoding

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

分析死锁时,"FixIn的DebugInfo不会指向关键部分"

我正在使用Windbg来分析在用delphi编写的数据快照应用程序服务器中发生的死锁.

我跑的时候

!analyze -hang -v
Run Code Online (Sandbox Code Playgroud)

我明白了

:000:x86> !analyze -hang -v
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************

GetPageUrlData failed, server returned HTTP status 404
URL requested: http://watson.microsoft.com/00000000.htm?Retriage=1

FAULTING_IP: 
+6ced240
00000000 ??              ???

EXCEPTION_RECORD:  ffffffffffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 0000000000000000
   ExceptionCode: 80000003 (Break instruction exception)
  ExceptionFlags: 00000000
NumberParameters: 0

FAULTING_THREAD:  0000000000000000

BUGCHECK_STR:  HANG

DEFAULT_BUCKET_ID:  APPLICATION_HANG

PROCESS_NAME:  ********.exe

ERROR_CODE: (NTSTATUS) 0xcfffffff - 

EXCEPTION_CODE: (NTSTATUS) 0xcfffffff - 

MOD_LIST: 

NTGLOBALFLAG:  0

APPLICATION_VERIFIER_FLAGS:  0

DERIVED_WAIT_CHAIN:  

Dl Eid Cid     WaitType
-- --- ------- …

delphi debugging multithreading windbg critical-section

5
推荐指数
1
解决办法
1683
查看次数

Delphi 2007和Indy10在IdStackWindows中编译错误

我刚刚将我的Indy10安装更新到最新版本(5276),现在我在尝试编译Windows应用程序时遇到错误.

IdStackWindows.pas(2364)错误:E2029'..'预期,但';' 发现

问题似乎是ka: tcp_keepalive2364年的第2364号声明TIdStackWindows.SetKeepAliveValues.

我在Windows 7 Professional x64上使用Delphi 2007.

delphi indy delphi-2007 indy10

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