我有一个程序在关机期间遇到了一些麻烦,引发了我无法追溯到其来源的异常.它似乎与时间相关且不确定.这是在所有共享资源被释放后发生的,并且由于它已经关闭,因此内存泄漏不是问题,所以这让我想知道是否有任何方法只是告诉程序在释放共享资源后立即和静默终止,而不是继续关闭序列并给出一个异常消息框.
有谁知道这是怎么做到的吗?
TFileStream提供缓冲输出,这在大多数情况下都很好,但在某些情况下(特别是在调试期间),立即刷新缓冲区会很好.事情是,除了打电话给Free之外,我不知道有什么方法可以做到这一点,这有点适得其反.
有没有更好的方法呢?
我有一个非常简单的表格,上面有一个TOpenDialog和一个按钮.当我按下按钮时,它会在对话框上调用Execute.如果我在调试器中观察,打开对话框的行为会产生类似于14个线程的行为,当我关闭对话框时它们也不会消失.
任何人都知道这是怎么回事?
在Delphi中,您可以使用编译器指令禁用特定警告,例如
{$WARN USE_BEFORE_DEF OFF}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试用特定的提示做到这一点时,编译器表示它不知道{$ HINT}是什么,而我的undercore_style_name是从帮助文件中获取的.有没有办法做到这一点?
我知道我已经看到了一个黑客的例子来定义现有VCL组件的自定义版本,比如TButton或TEdit,具有相同的类名并做一些事情来使DFM流转化器实例化你的版本而不是原本的.不幸的是,我处于一种我需要能够做到这一点的情况,我找不到写作.有谁知道在哪里可以找到有关如何实现这一目标的信息?
我正在尝试找到一个bcrypt可以在Delphi中使用的实现.关于Googling给我带来的唯一有用的东西就是这个下载页面,其中包含一个叫做winapi单元的翻译标题bcrypt.h.但是,当我查看它提供的功能时,bcrypt.h似乎实际上没有任何方式使用Blowfish算法来散列密码!
我在C中找到了一些bcrypt实现,我可以从中构建DLL并链接到它们,除了它们似乎都需要*nix或GCC特定的,所以这也不起作用!
这有点让我感到困扰.我认为找到一个实现很容易,但事实上似乎并非如此.有谁知道我可以在哪里买到一个?
我有一个带有大量控件的表单,我想迭代某个面板上的所有控件并启用/禁用它们.
我试过这个:
var component: TComponent;
begin
for component in myPanel do
(component as TControl).Enabled := Value;
end;
Run Code Online (Sandbox Code Playgroud)
但那没有做任何事.原来所有组件都在表单的组件集合中,而不是它们的父对象.那么有谁知道是否有任何方法可以获得控件内的所有控件?(除了像这样的丑陋的解决方法,这是我最终必须做的):
var component: TComponent;
begin
for component in myPanel do
if (component is TControl) and (TControl(component).parent = myPanel) then
TControl(component).Enabled := Value;
end;
Run Code Online (Sandbox Code Playgroud)
有人请告诉我有更好的方法......
我正在尝试调试用C编写的DLL中的问题,该问题一直导致访问冲突.我正在使用Visual C++ 2008,但代码是直的C.
我已经习惯了Delphi,如果在调试器下运行时发生异常,程序将立即进入调试器,它将为您提供检查程序状态的机会.但是,在Visual C++中,我得到的只是Output选项卡中的一条消息:
First-chance exception at blah blah blah: Access violation reading location 0x04410000. 没有休息,没有.它只是进入并展开堆栈,直到它回到我的Delphi EXE中,它识别出错误并在那里提醒我,但到那时我已经失去了几层调用堆栈,我不知道发生了什么.
我已经尝试了其他的调试技术,但无论它在做什么,都是在C宏中的嵌套循环中深入调用,这个循环被调用超过500次,而这只是我的技能(或者我的耐心).
我认为必须有一些方法来获得"第一次机会"的例外,实际上给我一个"机会"来处理它.可能有一些"在第一次机会异常时立即中断"配置设置我不知道,但它似乎并不是所有可发现的.
有谁知道它在哪里以及如何启用它?
在与TortoiseSVN合并后,我在运行冲突解决方案时遇到了一些麻烦.
我正在尝试将数据发送到BeyondCompare并使用其3向合并功能.不幸的是,它以与BeyondCompare期望的顺序不同的顺序发送文件,因此它的合并完全错误.
如果我在资源管理器中右键单击并说出TortoiseSVN->设置,那么在外部程序 - >合并工具下我可以指定BeyondCompare的路径,但是参数没有任何内容.如何重新排序它发送到外部合并工具的参数,以便我可以在BeyondCompare中显示正确的内容?
TEnumerable<T>,所有Generics.Collections容器类的基类都有一个非常奇怪的声明.它看起来像这样:
type
TEnumerable<T> = class abstract
protected
function DoGetEnumerator: TEnumerator<T>; virtual; abstract;
public
function GetEnumerator: TEnumerator<T>;
end;
function TEnumerable<T>.GetEnumerator: TEnumerator<T>;
begin
Result := DoGetEnumerator;
end;
Run Code Online (Sandbox Code Playgroud)
TEnumerator<T> 同样声明一个公共的MoveNext方法和一个私有的DoMoveNext函数,而MoveNext除了调用DoMoveNext之外什么都不做.
除了添加额外的函数调用开销,使调用堆栈更长,并且在尝试从这些基类继承的编码器的头脑中产生混淆之外,任何人都可以向我解释这个服务的目的吗?这种结构化方式是否有任何实际优势,因为如果有,我看不到它......
delphi ×8
controls ×2
abort ×1
bcrypt ×1
buffer ×1
c ×1
debugging ×1
delphi-2009 ×1
directive ×1
exception ×1
flush ×1
forms ×1
generics ×1
hints ×1
iterator ×1
shutdown ×1
svn ×1
tfilestream ×1
topendialog ×1
tortoisesvn ×1
vcl ×1
visual-c++ ×1
windows ×1