Questions tagged «delphi»

Delphi是一种通过使用对象Pascal快速开发本机Windows,macOS,Linux,iOS和Android应用程序的语言。该名称指的是Delphi语言及其库,编译器和IDE,用于帮助编辑和调试Delphi项目。

2
是否记录了编译器对隐式接口变量的处理?
我不久前问了一个关于隐式接口变量的类似问题。 这个问题的源头是我的代码中的一个错误,因为我没有意识到编译器创建的隐式接口变量的存在。拥有它的过程完成时,此变量已完成。反过来,由于变量的生存期比我预期的长,导致了一个错误。 现在,我有一个简单的项目来说明编译器的一些有趣行为: program ImplicitInterfaceLocals; {$APPTYPE CONSOLE} uses Classes; function Create: IInterface; begin Result := TInterfacedObject.Create; end; procedure StoreToLocal; var I: IInterface; begin I := Create; end; procedure StoreViaPointerToLocal; var I: IInterface; P: ^IInterface; begin P := @I; P^ := Create; end; begin StoreToLocal; StoreViaPointerToLocal; end. StoreToLocal就像您想象的那样被编译。I函数的结果局部变量作为隐式var参数传递给Create。整理StoreToLocal一次即可调用IntfClear。没有惊喜。 但是,StoreViaPointerToLocal区别对待。编译器会创建一个隐式局部变量,并将其传递给Create。当Create返回时,对分配P^进行。这使例程具有两个局部变量,这些局部变量保存对接口的引用。整理StoreViaPointerToLocal导致两次致电IntfClear。 的编译代码StoreViaPointerToLocal如下: ImplicitInterfaceLocals.dpr.24: …

19
根据定界符将字符串拆分为字符串数组
我正在尝试找到一个Delphi函数,该函数会将输入字符串分成基于定界符的字符串数组。我在Google上找到了很多东西,但是似乎所有人都有自己的问题,而且我还无法解决其中的任何问题。 我只需要将像这样的字符串拆分为 "word:doc,txt,docx"基于':'的数组。结果将是 ['word', 'doc,txt,docx']。 有人有他们知道的功能吗? 谢谢


2
使用Delphi XE2在MacOS中不显示Webview
我已经开始转换Webview接口以在Delphi中使用。我设法加载了Webkit库,并且调用的接口方法似乎正常工作,但是,我似乎无法在主窗体上显示Webview。 下面是我声明的接口 WebFrameClass = interface(NSObjectClass) ['{7BE750C8-DFEC-4870-851A-12DBCB0B78F6}'] end; WebFrame = interface(NSObject) ['{BCFA04BE-41AB-4B78-89C0-3330F12C7695}'] procedure loadRequest(request: NSURLRequest); cdecl; end; TWebFrame = class(TOCGenericImport<WebFrameClass, WebFrame>) end; WebViewClass = interface(NSViewClass) ['{0D9F44B7-09FD-4E35-B96E-8DB71B9A2537}'] {class} function canShowMIMEType(MIMEType: NSString): Boolean; cdecl; end; WebView = interface(NSView) ['{C36D8016-2FCB-49F0-BA1C-C9913A37F9AC}'] procedure clos; cdecl; procedure setHostWindow(hostWindow: NSWindow); cdecl; function initWithFrame(frame: NSRect; frameName: NSString; groupName: NSString): …

1
iOS中的Delphi XE6链接C代码
我已经在Android上使用需要C代码的Delphi XE6构建了一个应用程序。但是在iOS上,我无法使其正常运行。我怀疑问题与手臂/拇指状态有关,但我不确定。在这两种系统中,从Pascal调用C代码都没有问题。但是,如果C代码回调了Pascal过程,iOS会生成一个"bad system call (12)" 这是帕斯卡代码: function testarm(a,b:integer):integer; cdecl; external "testC.o"; Procedure testC; Begin testarm(1,2); end; function BackToPascal(a,b:integer): integer; cdecl; Begin result := a+b; end; ...... exports BackToPascal; 这是C代码: extern int BackToPascal(int a,int b); extern int testarm(int a,int b) { int i; i = BackToPascal(a,b); return i+1; } 在android上,这就是我的编译方式(正在运行): ..."arm-linux-androideabi-gcc.exe" …
68 ios  c  delphi  pascal  delphi-xe6 

1
BcdDivide函数在Delphi XE和XE2中的行为不同
FmtBcd.pas已在Delphi XE2中进行了广泛的修订和重写。在我的一个项目中,我有一个案例,对两个Bcd值使用除法运算,但是两个版本产生不同的结果。在最坏的情况下,Delphi XE2可能会抛出Bcd overflow error。 示例:在Delphi XE2控制台应用程序中运行以下代码: var A, B, C, D: TBcd; begin A := StrToBcd('1'); B := StrToBcd('3'); BcdDivide(A, B, C); WriteLn(BcdToStr(C)); try BcdMultiply(C, C, D); WriteLn(BcdToStr(D)); except on E: Exception do WriteLn(E.Message); end; ReadLn; end. 上面的输出将是: 0.333333333333333333333333333333333333333333333333333333333333333 BCD overflow 该变量C包含一个Bcd值,其特异性为63个小数位。BcdMultiply对变量执行第二次操作C将导致Bcd overflow error。 但是,在Delphi XE中运行相同的代码会产生以下结果,而不会出现任何异常提示: 0.3333333333 0.11111111108888888889 任何人都可以提出解决该问题的最佳实践方法吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.