小编mj2*_*008的帖子

如何确保只运行我的应用程序的单个实例?

Delphi XE VCL是否支持确保只运行单个应用程序实例?

在过去,我使用库代码来控制一直看起来很复杂的Mutex.当我在Delphi XE中开始一个新项目时,我想知道是否需要挖掘旧代码,或者是否已经在XE中内置了支持?或者是否有另一个易于应用的代码,既漂亮又现代?

delphi delphi-xe

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

为什么我们的MonoTouch应用程序会破坏垃圾收集器?它并没有内存不足

我们有一个简单的问题,但原因很复杂.我们是经验丰富的开发人员,并且已经对可能导致它的原因进行了大量研究.我们希望MonoTouch开发人员能够与我们合作,以确定人们所面临的常见问题,而且目前还没有解决方案.我们已经为此工作了两个多星期,但未能解决它.

问题是:为什么我们的MonoTouch应用程序在垃圾收集器中崩溃?它并没有内存不足.

情况是我们有一个应用程序定期检查Web服务(可能每5秒).经过一段时间后,内存管理中止失败.这通常在大约一个半小时后发生,但可以是十分钟到一夜之间的任何地方.这种情况发生在我们所有的测试设备上(我们总共有7个测试设备,包括iOS3和iOS4,iPod Touch,iPhone和iPad(1和2).在查看StackOverflow之后,我们在计时器中添加了一个System.Gc.Collect.这改善了一些事情(失败需要更长的时间),但它并没有消失.还有一点值得补充的是,来自iPad的内存日志显示有777个免费模块,我们的应用程序使用了2041个,共有26488个有线页面.由于我们收集了垃圾,并且没有做出与我们之前5秒做的不同的事情,因此内存耗尽似乎很奇怪.

我们升级到MonoTouch 4.0.1,但还没有修复它.

计算器上可能出现的同一个问题的问题,但没有回答它:五六六六九〇五 /四五四五三八三/五四九二四六九/5426733

iPad2上发生故障的堆栈如下.失败可能发生在主线程或http线程中,但始终在此GC_序列中.我已经在下面列出了内存管理器GC_remap的代码,并进行了讨论.

Thread 10 Crashed:
0   libsystem_kernel.dylib  0x34b4da1c __pthread_kill + 8
1   libsystem_c.dylib       0x3646a3b4 pthread_kill + 52
2   libsystem_c.dylib       0x36462bf8 abort + 72
3   MyApp                   0x004ca92c mono_handle_native_sigsegv (mini-exceptions.c:2249)
4   MyApp                   0x004f2208 sigabrt_signal_handler (mini-posix.c:195)
5   libsystem_c.dylib       0x36475728 _sigtramp + 36
6   libsystem_c.dylib       0x3646a3b4 pthread_kill + 52
7   libsystem_c.dylib       0x36462bf8 abort + 72
8   MyApp                   0x0061dc94 GC_remap (os_dep.c:2092)
9   MyApp                   0x00611678 GC_allochblk_nth (allchblk.c:730)
10  MyApp                   0x00611028 GC_allochblk (allchblk.c:561)
11 …

memory-management xamarin.ios ios

17
推荐指数
1
解决办法
1708
查看次数

我的应用程序如何找到Windows消息的发件人?

我有一个应用程序,它使用库中的键盘钩子程序.一条消息的钩子中的wParam是255,我们认为是"(reserved/OEMClear)".我想弄清楚这条消息的来源,因为它会导致我的应用程序在库中崩溃,并且鉴于它不应该发生,识别它会很好.该消息仅在我们拥有的一台PC上反复出现 - 其他计算机根本看不到该消息.

那么,有没有办法跟踪发送到窗口的消息的来源,或者系统上的所有人?

windows message keyboard-hook

16
推荐指数
1
解决办法
5150
查看次数

如何更改Delphi TDictionary或TObjectDictionary中的Key值?

我可以在不更改值的情况下更改TDictionary中的键吗?

为了解释,我使用的是TObjectDictionary,它源自Delphi XE Generics.Collections单元中的TDictionary.这一切都很好,除了我还需要能够更改存储的对象的键值.

我的第一次尝试如下:

MyObject := MyDictionary.Items[OldKeyValue];
MyDictionary.Remove(OldKeyValue);
MyDictionary.Add(NewKeyValue, MyObject);
Run Code Online (Sandbox Code Playgroud)

这个问题是Remove()导致对象被释放.我尝试使用AddOrSetValue将值更改为nil,但这也是Free的对象.既然我已经告诉它拥有它们的字典,这是公平的.虽然TObjectDictonary中没有额外的功能可以在没有Free的情况下删除,所以我因此尝试在不改变值的情况下更改字典中的Key.但是我无法在Delphi XE帮助中看到任何看起来会这样做的内容.这有可能吗?如果没有,我会回到使用字典并自己释放它.

delphi delphi-xe

9
推荐指数
1
解决办法
3192
查看次数

如果卸载加载它的DLL,是否会删除DLL?

采用标准的Windows应用程序.它使用LoadLibrary加载DLL来调用其中的函数(我们称之为DLL_A).该函数加载另一个DLL(我们称之为DLL_B).应用程序现在使用FreeLibrary卸载DLL_A DLL,因为它不再需要它.

问题是: DLL_B是否仍在内存中并加载?

这是我可以依赖的东西,还是没有文件记录?

windows dll winapi

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

我在哪里可以找到Mac Office 2011开发人员的详细信息?

我想要了解Mac版Office 2011的API和附加功能.我在MSDN上找不到任何文档 - 它必须被隐藏得很好.有人能指点我吗?谢谢.

macos ms-office

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

如何针对流行的病毒扫描程序测试我的应用程序?

我需要知道我的应用程序是否被最流行的防病毒软件包标记为病毒(不是最好的,但最大的是用户群).因此,我想知道其他人如何解决这个问题.一些背景:

我有一个用Delphi编写的应用程序.自从发现Delphi病毒以来,我的应用程序出现了误报问题,特别是我的演示版由于某种原因(它们都共享相同的代码).AVG一直很好,我现在可以轻松地将我的文件列入白名单,但后来我得到了最新的DevExpress安装程序,它也是假的.鉴于这种情况越来越普遍,让我感到震惊的是,我需要了解我的应用程序是否被最受欢迎的反病毒软件包标记.因此,我想知道其他人如何解决这个问题.我不希望人们下载我们的演示版本,获得AV警告,并决定不尝试它.

到目前为止,我唯一的选择是购买大量AV包并将它们放入VM,或者使用像VirusTotal这样的服务.后者似乎是一个理想的选择,但事实上,他们将测试限制在20Mb以下的文件,我的文件比这大.没有付费选项来扩展功能.(我认为这是一个奇怪的限制,但Kaperskis免费检查仅限于1Mb!)

你如何检查你的申请?

windows delphi antivirus virus-scanning

7
推荐指数
2
解决办法
638
查看次数

什么是SQL Server的理想索引策略?

我和朋友正在开发一个使用SQL Server的新项目.在我之前完成项目的SQL中,我总是将索引放在JOIN或WHERE中使用的任何字段上.

我的朋友只有在他们有性能需求时才添加它们.这个想法是维护索引需要付出代价,并且您希望确保支付这笔费用.可以公平地说,有些查询不会经常使用,而且有些表会比其他表更加积极地添加.

因此,我正在寻找有关数据库索引的"最佳实践"的建议.什么对你有用?

sql sql-server

7
推荐指数
2
解决办法
6930
查看次数

德尔福字符串泄漏

我正在使用Delphi XE,并编写一个使用RemObjects SDK进行通信的应用程序(如果可能相关).我有FastMM调试,有时(并不总是)当我关闭它时会发出关于单个"意外内存泄漏"的警告."发生意外的内存泄漏.意外的小块泄漏是:117-124字节:UnicodeString x 1".很偶然,我得到x2报道.

现在,我的理解是字符串是引用计数,并且由于没有其他对象导致泄漏,可能导致这种情况发生的情况是什么?在这个StackOverflow问题中,人们无法找到泄漏的方法.

如果没有明显的方法,那么我将下载最新的FastMM源(它似乎不包含在XE源中).

[编辑一旦解决]找到这个的解决方案是安装FastMM源,并启用FullDebugMode来获取堆栈跟踪.

delphi delphi-xe

7
推荐指数
4
解决办法
5822
查看次数

如何为枚举的RTTI字段创建通用TValue?

这里的问题中,示出了用于创建与SetValue一起使用的兼容TValue的方法.我正在尝试制作一个通用版本,使用RTTI将类存储到INI文件中.这是我的减少代码:

procedure TMyClass.LoadRTTI(xObject: TObject);
var
  LContext: TRttiContext;
  LClass: TRttiInstanceType;
  xField : TRttiField;
  szNewValue : String;
  xValue : TValue;
begin
  LContext := TRttiContext.Create;
  LClass := LContext.GetType(xObject.ClassType) as TRttiInstanceType;

  for xField in LClass.GetDeclaredFields do
  begin
    szNewValue := IniFile.ReadString(szSection, xField.Name, '');
    if szNewValue <> '' then // emumerated will be '0' (zero) as that is what GetValue.AsString returns
    begin
      case xField.FieldType.TypeKind of
      tkEnumeration: xValue := StrToIntDef(szNewValue, xField.GetValue(xObject).AsOrdinal);
      end;
      xField.SetValue(xObject, xValue); // FAILS HERE with 'Invalid calss typecast
    end;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

在引用的答案中,解决方案是使用TValue.From()方法获取值,但这似乎需要适当类型的变量.我没有这样的类型,因为我的代码不知道它是什么. …

delphi rtti delphi-xe

5
推荐指数
2
解决办法
3801
查看次数