小编Ed *_* S.的帖子

红宝石序列化(Marshaling)如何工作?

我已经找到了关于这个主题的一些信息(比如这个链接),但没有任何东西可以告诉我它是如何实际工作的.如果你不想阅读下面的文章,这里有真正的问题:

  1. 我应该如何实现marshal_dumpmarshal_load方法?即使是一个简单的例子也可以.

  2. 何时marshal_load被调用,它如何'知道'要创建哪种类型的对象?如果文件中有多个相同类型的对象,你怎么知道哪个是哪个?我显然很困惑......

  3. 如果我有一个表示图像的对象,是否有不同的方法将其写入磁盘?

我的具体问题是:

它有点复杂,因为我没有我希望序列化的对象的源代码.

我正在研究游戏引擎的mod(使用RGSS2游戏库的RPG Maker VX).有一个名为Bitmap的类属于(闭源)API.我想在游戏之间保存这个对象/图像,所以我需要将它序列化为保存文件.我不是ruby专业人士,但我知道我可以定义两个方法(marshal_dumpmarshal_load),当我尝试序列化对象时,它将由"Marshal"模块调用.

问题是我不知道如何实现所需的两种方法.我实际上可以把它们留作空方法,它似乎工作,但实际上处理了对象并且图像数据消失了.除此之外,我不明白它在内部做了什么,显然创建空方法是错误的.

所以有人能告诉我这些东西在内部如何运作吗?我认为这有助于我解决我的问题.除此之外,还有其他类型的图像格式我可以使用,我可以保存到文件中,避免自己进行序列化吗?

ruby serialization

10
推荐指数
1
解决办法
8025
查看次数

使用Ruby,读取包含名称/值对的文件到哈希中

我有一个文件,每行都有一个名称/值对,我想打开文件,读取每一行并初始化一个哈希.

文件:

john, 234
joe, 2222
Run Code Online (Sandbox Code Playgroud)

并加载一个哈希,以便我可以遍历键值对.

ruby

10
推荐指数
4
解决办法
2万
查看次数

为什么我不能改变段寄存器的值?(MASM)

我决定自学汇编语言.

我已经意识到,如果我尝试更改任何段寄存器的值,我的程序将无法编译.

我发现的每篇文章都说我确实可以改变至少4个段寄存器的值,那么是什么给出了?

我真的只对为什么在这一点上感兴趣,我没有任何改变这些地址的真正目的.

x86 assembly masm

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

Canvas.drawLines显示脱节的段

可能重复:
Android如何用手指画出平滑的线条

我是Android和Java编程的新手,并且一直在玩移动应用程序开发.我最近创建了一个视图,它简单地保持与用户的手指动作一致地绘制线条.但是,我在使用Canvas.drawLines方法时遇到了一些麻烦.

我没有在所有点之间获得连续的线条,而是获得了更多的虚线模式,并且各段之间有间隔:

Canvas.DrawLines中的细线段

以下是一组示例数据和简单的代码来重现问题(点数据来自真正的手指滑动):

public class SomeView extends android.view.View 
{
    private float[] _data = { 292.36545f, 104.37576f, 285.3567f, 112.39249f, 274.34293f, 113.39456f, 254.3179f, 115.39874f, 248.3104f, 116.40082f, 228.28535f, 118.405f, 214.26784f, 119.407104f, 211.26408f, 119.407104f, 204.25533f, 120.40918f, 202.25282f, 120.40918f, 201.25157f, 121.411255f, 199.24907f, 124.41754f, 197.24657f, 125.41962f, 196.24532f, 130.43005f, 195.24406f, 139.44885f, 197.24657f, 144.45929f };
    private Paint _paint;

    public SomeView( Context c, AttributeSet attrs)
    {
        super( c, attrs );
        _paint = new Paint();
        _paint.setColor(Color.BLUE);
        _paint.setStrokeWidth(6);   
    }   

    @Override
    public void onDraw(Canvas canvas)
    {       
        canvas.drawLines( _data, _paint);
    } …
Run Code Online (Sandbox Code Playgroud)

java android drawing gesture

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

实体框架代码First IQueryable

我正在使用Entity Framework Code First并遇到了一个小路障.我有一个类"Person"定义如下:

public class Person
{
    public Guid Id { get; set; }
    public virtual ICollection<History> History { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和一个"历史"类定义如下:

public class History
{
    public Guid Id { get; set; }
    public virtual Person Owner { get; set; }
    public DateTime OnDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我打电话时:

IEnumerable<History> results = person.History
                               .OrderBy(h => h.OnDate)
                               .Take(50)
                               .ToArray();
Run Code Online (Sandbox Code Playgroud)

它似乎为这个人拉出了所有的历史,然后在记忆中订购它.关于我缺少什么的任何建议?

提前致谢!

c# entity-framework-4.1

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

通过COM在64位进程中使用32位DLL

所以前段时间我正在研究一个我知道即将出现的问题.我们有一个DLL链接到某个库的32位版本.我们没有这个库的x64版本,我们没有关于更换它的实用选项.

当我执行这个初步调查时,我发现了一篇或两篇描述64位进程可以通过COM"服务器"使用32位DLL(Windows)的方法.不幸的是,我丢失了我保存的链接,现在我已经搜索了一个多小时而没有运气.

有人在这里熟悉我描述的过程吗?我不能为我的生活记住我用过的神奇咒语在搜索中得出正确的结果,当然,现在是实施时间.在此先感谢您提供的任何帮助,我将继续寻找其中的同时.

c++ com 32bit-64bit

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

什么是C#"格式化"标准?

在C#(.NET)中,常规的"格式化"标准是什么?

例如,对于参数名称,到目前为止我注意到没有前缀的camelCase,是吗?对于对象名称,camelCase也没有前缀,对吧?

对于名称空间,类,函数和属性,单词的首字母大写且没有前缀,这是否正确(再次)?

"临时"对象是如何格式化的?

例:

namespace TestNamespace
{
    class MyOwnCoolClass
    {
        MyOwnCoolClass(int length, BinaryWriter writer)
        {
            BinaryWriter tempbw = new BinaryWriter(length);
            return tempbw;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

(注意:此代码无效,我知道,这只是为了演示格式化).谢谢!

.net c# formatting standards

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

有没有更好的方法来执行此操作:Convert.IsDBNull(row [somecolumn])检查

有没有更好的方法来编写此代码..

MyObject pymt = new MyObject();
pymt.xcol1id= Convert.IsDBNull(row["col1id"]) ? 0 : (int)row["col1id"];
pymt.xcold2id= Convert.IsDBNull(row["col2id"]) ? String.Empty : (string)row["col2id"];
pymt.xcold3id = Convert.IsDBNull(row["CustNum"]) ? 0 : (decimal)row["xcold3id"];
Run Code Online (Sandbox Code Playgroud)

这可以用一种更干净的方式来完成..就像通用方法一样?

c# ado.net

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

为什么C#调用错误的重载?

我有以下的代码,真的 好笑的东西:

class Parent {
    public virtual void DoSomething(IEnumerable<string> list) {
        Console.WriteLine("Parent.DoSomething(IEnumerable<string>)");
    }
}

class Child : Parent {
    public override void DoSomething(IEnumerable<string> list) {
        Console.WriteLine("Child.DoSomething(IEnumerable<string>)");
    }

    public void DoSomething(IEnumerable<object> list) {
        Console.WriteLine("Child.DoSomething(IEnumerable<object>)");
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,正确覆盖了DoSomething方法Child.

以下代码的输出非常意外:

...
Child c = new Child();
var list = new List<string> { "Hello", "World!" };
c.DoSomething(list);
...
Run Code Online (Sandbox Code Playgroud)

打印 Child.DoSomething(IEnumerable<object>)

而协助Parent引用c生成正确的输出:

...
Parent c = new Child();
var list = new List<string> { "Hello", …
Run Code Online (Sandbox Code Playgroud)

c# overriding

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

MSBuild无声地跳过一个项目(在我的sln中有很多)

即将失去理智......通过MSBuild运行的解决方案构建无法在解决方案中构建许多项目中的一个.

构建不会失败,它根本就不会尝试构建它(通过日志文件MSBuild和devenv输出确定).这是VS2010解决方案文件.让我们调用问题项目Project X.我所知道的:

  • 我有一个包含约30个项目的解决方案.
  • 所有这些项目都设置为在Release | Win32下构建.我有双倍和三倍(和四倍)检查这个.
  • 如果我在VS中构建解决方案,每个项目都会正确构建,包括Project X.
  • 如果使用MSBuild用于启动devenv的完全相同的命令,则 Project X将构建.
  • 如果我启动MSBuild传递我的项目文件,Project X没有构建,没有记录为跳过,只是...根本没有(在日志和输出目录中).

我一次又一次地倾倒了项目文件.所有它真正做的是像这样发射devenv:

"C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\Common7\IDE\Devenv.com""MySolution.sln"/ build"Release | Win32"

同样,如果我在提示中使用完全相同的命令,则构建Project X. 我在MSBuild中启用了诊断级别日志记录无效.我在这一点上不知所措,任何帮助将不胜感激.

msbuild visual-studio-2010 visual-c++

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