我正在将用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中第二个转换的正确转换.
从我的理解,第一个是一个简单的类型指针.第二个是指针变量.但我不确定区别是什么.
我们正在尝试使用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编写的Windows服务,它们通常工作得很好,但有时我会得到一个可以被视为致命的异常抛出.当发生这种情况时,该服务旨在停止.
我的问题是如何以这样的方式退出服务,即SCM将自动尝试重新启动服务.(我已经在服务管理器中设置了服务的恢复选项)
MSDN声明
如果服务终止而未向服务控制器报告SERVICE_STOPPED状态,则认为该服务失败.
我已阅读此博客文章使用Windows服务的自动恢复功能,但我不知道如何在delphi中实现这一点.
我已经尝试了以下几点
编辑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) 我正在开发一个程序来与一些硬件接口,这些硬件正在发送已编码和包装的数据,以便在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) 我正在使用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 -- --- ------- …
我刚刚将我的Indy10安装更新到最新版本(5276),现在我在尝试编译Windows应用程序时遇到错误.
IdStackWindows.pas(2364)错误:E2029'..'预期,但';' 发现
问题似乎是ka: tcp_keepalive
2364年的第2364号声明TIdStackWindows.SetKeepAliveValues
.
我在Windows 7 Professional x64上使用Delphi 2007.