小编Ste*_*eve的帖子

如何减小Delphi dll的大小?

我最近从Delphi 7迁移到了Delphi XE3.

Delphi 7中的107kb的dll文件现在编译为2.7 MB.另一个是114kb,现在是4.7 MB!

这是正常的吗?我该怎么做才能减小文件大小?如果您需要更多信息,请询问.

更新:

这两个dll文件都已在发布模式下编译.

遵循梅森的建议:

4.7MB文件减少到834kb,2.7MB文件减少到2.1MB.2.1MB文件使用Generics和一个名为nExcel的外部库来生成Excel文件.虽然在文件大小较小时也使用了nExcel,但是使用泛型是代码的新增功能,我想这可能是文件大小保持相当大的原因.

delphi dll delphi-7 delphi-xe3

7
推荐指数
1
解决办法
1970
查看次数

我可以在Delphi中创建特定接口的通用列表吗?

在C#中,我可以创建一个包含特定接口的通用列表,例如:

myList = List<IMyInterface>;
Run Code Online (Sandbox Code Playgroud)

我可以在Delphi XE3中做同样的事情,如果是这样的话怎么样?

我知道我可以创建一个TInterfaceList来存储接口列表,但它不是强类型的,所以我仍然需要在列表中使用对象时进行转换.

有一种强烈的打字方式吗?

delphi generics interface delphi-xe3

5
推荐指数
1
解决办法
3516
查看次数

如何根据百分比概率做出选择

我希望使用这篇文章中提供的答案从列表中随机选择唯一的项目.

按照所描述的方法,在我的循环的每次迭代中,我生成概率值,该概率值是从列表中挑选当前项目的概率百分比.

我需要知道的是如何使用此百分比值来选择项目(或不是).

这是我的代码,remainingIndices是一个List<int>

for (var i = 0; i < remainingIndices.Count; i++)
{
    var probability = pixelsToAdd / (float)(remainingIndices.Count - i);
}
Run Code Online (Sandbox Code Playgroud)

pixelsToAdd是120并且remainingIndices.Count是3600.我得到的概率值从0.0333333351开始

解决方案应该灵活,可以使用更广泛的值,最好是任何值.

谢谢

评论

对于这个问题的未来读者,我应该澄清,起初我认为概率值是0到100之间的某个百分比,但实际上它是介于0和1之间的值,因此与返回值完全匹配Random.NextDouble()因此可以用于比较如下面的答案所述.

c# probability

5
推荐指数
1
解决办法
2479
查看次数

MySql错误1064使用MySQL WorkBench分配架构权限时

我刚刚在Windows 8 64bit上下载并安装了最新的MySQL版本(5.6).在安装期间使用了默认值,它们都运行顺利.

使用MySQL Workbench我创建了一个包含一个简单表的模式,并创建了一个新用户.在架构权限选项卡上,我为用户添加了一个新条目,按"选择""全部"按钮选择权限,然后单击"保存更改".一旦我这样做,我得到他跟随错误:

MySQL错误1064

任何想法为什么会这样?我是DB的新手,所以如果你有任何替代方法我可以尝试,请简单(一步一步)解释.

谢谢

mysql mysql-workbench

4
推荐指数
1
解决办法
3136
查看次数

有人可以解释为什么xna Rectangle结构的行为与它一样吗?

我很困惑为什么XNA Rectangle结构被编写得像.

如果我运行此代码:

var bounds = new Rectangle(0, 0, 10, 10);
        var bounds2 = new Rectangle(0, 10, 10, 10);
        var bounds3 = new Rectangle(0, 19, 10, 10);

        Debug.Print("Bounds X: {0}, Y: {1}, Top: {2} Left: {3} Bottom: {4} Right {5}", 
            bounds.X, bounds.Y, bounds.Top, bounds.Left, bounds.Bottom, bounds.Right);

        Debug.Print("Bounds2 X: {0}, Y: {1}, Top: {2} Left: {3} Bottom: {4} Right {5}",
            bounds2.X, bounds2.Y, bounds2.Top, bounds2.Left, bounds2.Bottom, bounds2.Right);

        Debug.Print("Bounds2 X: {0}, Y: {1}, Top: {2} Left: {3} Bottom: {4} Right {5}",
            bounds3.X, bounds3.Y, …
Run Code Online (Sandbox Code Playgroud)

c# xna

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

我可以通过引用传递对象

我试图将一个xna游戏中的对象传递给我正在编写的xna游戏库中的方法.该对象基本上可以是任何类型,包括引用和值类型.

游戏库用于调试目的,应该向屏幕打印传入的对象的当前值.它目前通过调用ToString对象来执行此操作,但将来字符串将根据基础类型进行格式化.

这是接收参数的游戏库方法

    public void AddToDebug(object obj)
    {
        var type = obj.GetType();
        _debugTypes.Add(obj, type);
    }
Run Code Online (Sandbox Code Playgroud)

以下是在主游戏项目中使用它的示例

VD.AddToDebug(_counter);
VD.AddToDebug(_message);
Run Code Online (Sandbox Code Playgroud)

_counter是一个int并且_message是一个字符串.

问题是这些值的变化不会反映在屏幕上,因为(我假设)它们是按值传递的,而不是通过引用传递的.

我尝试添加ref关键字以确保它们通过引用传递,但这会导致方法调用出错 The ref argument type does not match parameter type

有没有办法可以通过引用传递值类型而不必指定实际类型(如果我可以避免它,我不想为所有值类型创建方法重载).

任何其他建议也欢迎.谢谢

UPDATE

尝试几种不同的方法后,我最终决定采用传递一个简单的方法Func<T>进入AddToDebug方法如下所示.我意识到,至少在目前,我不需要基础值,只需要格式化字符串表示.

将来我可以扩展库以自动扫描传入的类型并显示其所有成员的值.如果是这样的话,我可能会使用@Hans Passant的建议来传递对相关课程的引用.

这就是说我会接受@Lee的答案,因为它在我的最终实现中最有用,建议使用Func.

这是我现在的代码,欢迎任何改进建议.感谢大家的帮助.

    public void AddToDebug<T>(Func<T> getValue, Color? color = null)
    {
        var w = new DebugEntry<T>(getValue, color.HasValue ? color.Value : Color.White);
        _values.Add(w);
    }

    public class DebugEntry<T> : IStringFormatter
    {
        private readonly Func<T> _getValue; …
Run Code Online (Sandbox Code Playgroud)

c# reflection ref

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