我正在运行Delphi XE8并安装了GetIt AsyncPro for VCL 1.0.当我编译32位应用程序但64位失败时,它工作正常.失败的是:
[dcc64 Error] OoMisc.pas(2771): E2065 Unsatisfied forward or external declaration: 'Trim'
Run Code Online (Sandbox Code Playgroud)
当我打开OoMisc.pas时看到:
{$IFNDEF Win32}
function Trim(const S : string) : string;
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
该Trim
功能似乎没有定义.该单位确实具有SysUtils
其使用条款.
测试可选节点存在的正确方法是什么?剪下我的XML是:
<Antenna >
<Mount Model="text" Manufacture="text">
<BirdBathMount/>
</Mount>
</Antenna>
Run Code Online (Sandbox Code Playgroud)
但它也可能是:
<Antenna >
<Mount Model="text" Manufacture="text">
<AzEl/>
</Mount>
</Antenna>
Run Code Online (Sandbox Code Playgroud)
Antenna的孩子可能是BirdBath或者AzEl,但不是两个......
在Delphi XE中,我尝试过:
if (MountNode.ChildNodes.Nodes['AzEl'] <> unassigned then //Does not work
if (MountNode.ChildNodes['BirdBathMount'].NodeValue <> null) then // Does not work
if (MountNode.BirdBathMount.NodeValue <> null) then // Does not work
Run Code Online (Sandbox Code Playgroud)
我使用XMLSpy来创建模式和示例XML,并且它们正确解析.我使用Delphi XE来创建绑定,它适用于大多数其他组合.
这必须有一个我忽略的简单答案 - 但是什么?谢谢......吉姆
随着XE8更新1,Win 7 64位和单个组件添加到一个空的文件夹我得到:错误:[dcc32致命错误] F2039无法创建输出文件.\ Win32\Debug\MountTest.
测试将在第一次编译并运行正常,但XE8必须关闭并重新启动才能再次编译.该组件是Mitov Software的仪表.组件供应商说这是一个已知的bug,没有修复.如果是这样,它的一个showstopper和项目结束对我来说.这真的是Delphi的终结吗?
这就是我为隔离问题所做的工作.
它应该在每次运行时编译(没问题).现在向项目添加一个空白表单.只要添加它就不要对表单做任何事情.将其添加到您的uses子句中.
它应该在每次点击Run时编译.现在打开空白表单并简单地触摸它以便需要重新编译.
当您运行应用程序时,它会在您第二次运行它时失败.
请注意,只需添加表单并"触摸"即可.无需代码.
这个问题对我的代码没有问题 - 它不可能.它是UI中的一个错误 - 必须是.
我有一个Delphi XE应用程序,它读取经过验证的XML文件,修改它然后保存它.可以验证保存的版本.我使用SML Spy来创建文件并对其进行验证.
现在我需要在内存中创建一个文档并保存它.问题是我无法弄清楚如何为文档生成xmlns和xsd信息属性,以便可以验证它.
我有一个项目有两个具有相同名称的表单.我需要使用其中一个.我假设我可以使用IFDEF来区分它们,但我发现在没有编译器抱怨的情况下我无法将它们都添加到项目中.我的用法子句看起来像这样.
uses
uFileManager, uMount, uSkyMap, uAntenna,
{$IFDEF SDR}
uSDR,
{$ENDIF}
{$IFDEF R7000Serial}
uR7000,
{$ENDIF}
uDatabase;
{$R *.dfm}
Run Code Online (Sandbox Code Playgroud)
'uSDR'和'uR7000'单元都有一个名为'Receiver'的表格.当我尝试添加'uR7000'单元时,我得到的项目是:"该项目已包含名为Receiver的表单或模块"
如何将两个单元添加到项目中?
我正在尝试连接到软件定义的接收器 DLL,该 DLL 需要提供回调以传送接收到的 I/Q 数据。
我可以很好地调用 DLL,但我不知道如何编写回调代码。
这是主模块的一部分:
uses
uReceiverHackRFDLLWrapper;
procedure TForm1.btnIDClick(Sender: TObject);
var
strptr: PAnsiChar;
begin
hackrf_board_init();
strptr := hackrf_board_id_name(0);
lblName.Caption := 'Name: ' + strptr;
end;
Run Code Online (Sandbox Code Playgroud)
这是 DLL 的包装器:
unit uReceiverHackRFDLLWrapper;
interface
uses Windows, uSETITypes, sysutils;
{$MINENUMSIZE 4}
type
// Trtlsdr_read_async_cb_t = procedure(buf: PAnsiChar; len: UINT32; ctx: Pointer);
// [UnmanagedFunctionPointer(CallingConvention.StdCall)]
// public unsafe delegate int hackrf_sample_block_cb_fn(hackrf_transfer* ptr); /* Return 0 if OK or -1 if error to stop */
THackrf_sample__block_cb_fn = function(var hackrf_transfer: Pointer): integer;
function hackrf_board_id_name(index: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将Excel工作表翻译成Delphi并偶然发现了Excel INT.Excel帮助说INT的向下舍入(向负无穷大).Excel单元格是:
C13-(24*INT(C13/24))
Run Code Online (Sandbox Code Playgroud)
其中C13初始化为-465.9862462并计算为14.01375378
我能提出的最好的Delphi是:
C13 := -465.9862462;
RoundMode := GetRoundMode;// Save current mode
SetRoundMode(rmDown);
C13 := C13 - (24 * (Round(C13 / 24)));
SetRoundMode(RoundMode);// Restore mode
Run Code Online (Sandbox Code Playgroud)
这会产生正确的答案,但有更好的方法吗?
我遇到了这段代码,但无法理解其目的是什么:
TDfmPropertyList = class(TobjectList<TDfmProperty>)
Run Code Online (Sandbox Code Playgroud)
它告诉我什么?
我正在使用字符串创建可用表单,但我无法弄清楚如何测试表单是否已创建。我只想要每个表单的一个实例。
Procedure TMainForm.CreateFormFromName(const FormName:String);
var
fc:TFormClass;
f:Tform
begin
fc := TFormClass(FindClass(FormName));
f := fc.Create(Application);
f.show
end;
Procedure TMainForm.FormCreate(Sender:TObject);
begin
RegisterClass(TfrmTest);
end;
Run Code Online (Sandbox Code Playgroud)
我可以向 CreateForm 发送一个字符串,它会创建表单。但是我如何阻止第二次创建相同表单的尝试呢?
如何发布包含布尔值和整数的Windows消息.我知道如何发布和恢复字符串.这是我的字符串代码.
procedure TForm5.Button1Click(Sender: TObject);
var
LParam: string;
WParam: string;
pLParam: pChar;
pWParam: pChar;
begin
Memo.Clear;
LParam := 'Now is the time for all good men...';
Length(LParam);
GetMem(pLParam, (Length(LParam) + 1) * SizeOf(Char));
Move(LParam[1], pLParam^, (Length(LParam) + 1) * SizeOf(Char));
WParam := 'This is the WParam. ';
Length(WParam);
GetMem(pWParam, (Length(WParam) + 1) * SizeOf(Char));
Move(WParam[1], pWParam^, (Length(WParam) + 1) * SizeOf(Char));
PostMessage(Handle, WM_SETPAUSE_MESSAGE, Integer(pWParam),Integer(pLParam));
end;
Run Code Online (Sandbox Code Playgroud)
这样可以恢复文字......
procedure TForm5.WMsetPause(var MESSAGE: TMessage) { message WM_SETPAUSE_MESSAGE };
var
pLParam: pChar;
pWParam: pChar;
begin
try …
Run Code Online (Sandbox Code Playgroud)