小编Jen*_*nix的帖子

getAvailableBlocksLong() * getBlockSizeLong() VS getAvailableBytes()

[编辑] 我在测试中犯了一个愚蠢的错误。我在这里问了一个不知道的问题。

答案是,两者都是一样的。但我把我的帖子留在这里给其他人。

getAvailableBlocksLong() * getBlockSizeLong()和 和有getAvailableBytes()什么区别 ?

我自己测试了一下,在 Genymotion 上得到了一个非常奇怪的结果。

来自getAvailableBlocksLong() * getBlockSizeLong()和的值getAvailableBytes()不同!

我真的不明白这里发生了什么。

它只与Genymotion有关吗?我应该getAvailableBytes()在大多数情况下使用吗?

java android emulation genymotion

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

缺少多维数组的大括号

当我在Visual Studio中为Android共享库构建项目时,我收到了一条警告消息.

warning : suggest braces around initialization of subobject
[-Wmissing-braces]
Run Code Online (Sandbox Code Playgroud)

此消息指示仅使用一对大括号的数组初始化语句.

int myArray[ROW][COL] = { 1, 2, 3, 4, 5, 6, ..., 451, 452, 453 };

我不能用两对书写的原因是将来有可能改变ROW和COL的大小.

它运行正常,但我不确定是否可以这样离开项目,因为在为仅Windows应用程序编写代码时,我从未见过这样的警告消息.

我是否必须认真对待这件事?

c++ arrays android warnings braces

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

内联替换会导致多线程代码中的无限循环吗?

请注意:这只是出于好奇而提出的问题,与编写更好的多线程代码无关。当然,我不会也不会在实际项目中编写这样的代码。

添加关键字时可能会发生内联替换inline。所以我很好奇。

假设我们有这样的代码:

static bool done = false;

inline void setDone(bool newState) {
    done = newState;
}

inline bool getDone() {
    return done;
}

void someWorkerThreadJob() {
    // Accessing without any lock/atomic/volatile
    while (getDone() == false) {
    }
}
Run Code Online (Sandbox Code Playgroud)

可以someWorkerThreadJob()像下面这样编译并进入无限循环吗?

void someThreadJob() {
    while (done == false) {
    }
}
Run Code Online (Sandbox Code Playgroud)

这也将我引向了下一个问题。类中的gettersetter怎么样?在类中定义的成员函数是隐式的inline,所以我认为可能会发生内联替换,因此同样的问题。这样对吗?

c++ parallel-processing multithreading inline

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

每当我调用rawQuery()时,是否必须关闭Cursor对象?

我打算第一次使用Android SQLite.

Cursor c = db.rawQuery("some select command here", null);

// some jobs with the cursor..

c = db.rawQuery("another select command here", null);

// some jobs with the cursor..

c.close();
db.close();

c = null;
db = null;
Run Code Online (Sandbox Code Playgroud)

如您所见,我试图多次调用rawQuery()方法.

  1. 我必须关闭游标之前,我打电话rawQuery()方法AGAIN

  2. 关闭游标和数据库后,我是否必须为变量赋值?

sqlite android cursor

3
推荐指数
1
解决办法
829
查看次数

不能在C#中为变量使用关键字'fixed'

fixed用数组和字符串变量测试了关键字并且工作得非常好,但我不能使用单个变量.

static void Main() {

    int value = 12345;
    unsafe {
        fixed (int* pValue = &value) { // problem here
            *pValue = 54321;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该行fixed (int* pValue = &value)导致编译器错误.我没有得到它,因为变量value不在unsafe块中而且还没有固定.

为什么我不能fixed用于变量value

c# pointers unsafe fixed

3
推荐指数
1
解决办法
1724
查看次数

使用共享库为Android调用约定

我为我的Unity3d应用程序用C++创建了一些插件文件.到目前为止,应用程序只是一个简单的原型,所以我只在我的桌面上测试编译为Windows的DLL库.今天我将这些文件重新编译为.so(共享对象)for Android(arm和x86)并收到警告消息.

警告:为此目标忽略调用约定'__stdcall'[-Wignored-attributes]

1.这意味着所有函数都编译为__cdecl?

2.我不能在.so库中指定调用约定吗?

我用__cdecl替换了__stdcall,但它也发生了一条警告消息.

c++ android arm calling-convention stdcall

3
推荐指数
1
解决办法
1773
查看次数

如何在 Java 中使用 NumberFormat 指定小数位数?

让我们运行这段代码:

double number = 12345.678888;
String str1 = String.format(Locale.FRANCE, "%.10f", number);
String str2 = NumberFormat.getInstance(Locale.FRANCE).format(number);

System.out.println(str1);
System.out.println(str2);
Run Code Online (Sandbox Code Playgroud)

输出将是:

12345,6788880000

12 345,679

但这些都不是我想要的。我想指定小数位数,NumberFormat就像String.format()可以做的那样。我也尝试过DecimalFormat,但我认为这不是答案。

如果我正在编写 C# 代码,可以像这样简单地完成:

string str = string.Format(new CultureInfo("fr-FR"), "{0:#,##0.0000000000}", number);
Run Code Online (Sandbox Code Playgroud)

输出将是:

12 345,6788880000

我怎样才能在 Java 中实现同样的事情?

java string.format locale number-formatting

3
推荐指数
1
解决办法
1397
查看次数

在C#中使用带有类名的"this"

[编辑]我想问的只是放一个类名this,所以它不是引用一个外部类成员.对不起我的不恰当的例子!

[编辑2]有人报告这是重复但不!正如我之前所说,我只是想知道是否有可能像Java一样引用MyClass.thisthis互换.这根本不是一个实际问题,只是为了学习C#语言本身.我不介意删除这个,如果人们真的认为它是重复的,所以让我知道.

在Java中,您可以使用this类名这样的类:

class OuterClass {
    int outerMember = 1;

    class InnerClass {
        int innerMember = 2;

        public void printOuterMember() {
            System.out.println(OuterClass.this.outerMember);
            System.out.println(outerMember);
        }

        public void printInnerMember() {
            System.out.println(InnerClass.this.innerMember);
            System.out.println(this.innerMember);
            System.out.println(innerMember);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有时候不需要课程名称,但有时候会有所帮助.

所以我在C#中尝试了同样的事情,但似乎这是不可能的.我对吗?

c# this

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

扩展已经由其父级扩展的接口AGAIN有什么好处?

说,我有以下代码:

interface IAAA {
    void aaa();
}

interface IBBB extends IAAA {
    void bbb();
}

class MyClass implements IAAA, IBBB {
    public void bbb() { }
    public void aaa() { }
}
Run Code Online (Sandbox Code Playgroud)

是否有实现的任何好处IAAAMyClass?正如你所看到的,IAAA已经被扩展IBBB,并MyClass正在实施两个IAAAIBBB.似乎IAAA从中移除MyClass不会影响任何事情.

我之所以问这个愚蠢的问题,是因为我在Android开源项目中经常看到这种模式,有时甚至在标准中也是Java API如此ArrayList.

我想谈的一个例子是SpannableStringBuilder.

Spanned接口扩展CharSequence接口.

Spannable接口扩展Spanned接口.

Editable接口扩展CharSequenceSpannable接口.

SpannableStringBuilder类实现CharSequence …

java android interface

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

Android中的onTouch和onTouchEvent方法

我用'onTouch'方法写下面的内容.

但'getPointerCount()'和'getAction()'一直吐出相同的值.

此代码无法识别多点触控.

当MotionEvent.ACTION_UP发生时,不会调用'onTouch'方法.

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    relativelayout = (RelativeLayout) findViewById(R.id.relativeLayout);

    relativelayout.setOnTouchListener(new OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            Log.i("test", "multiTouchCount : " + event.getPointerCount());
            Log.i("test", "action : " + event.getAction());
            return false;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

所以,我尝试使用onTouchEvent方法做同样的事情,这是有效的.

public boolean onTouchEvent(MotionEvent event) {

    Log.i("test", "multiTouchCount : " + event.getPointerCount());
    Log.i("test", "action : " + event.getAction());

    return super.onTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)

'onTouch'方法有什么问题?

android touch-event ontouch

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

stdcall调用约定并在C#中使用pinvoke

我创建了一个DLL文件,其中包含两个空函数.

extern "C" __declspec(dllexport) void __stdcall myFunc1() {
    // just empty function
}

extern "C" __declspec(dllexport) void __cdecl myFunc2() {
    // just empty function
}
Run Code Online (Sandbox Code Playgroud)

在C#中,我可以使用DLLImport如下属性调用函数.

[DllImport("myDLL", CallingConvention=CallingConvention.StdCall)]
private extern static void myFunc1();

[DllImport("myDLL", CallingConvention=CallingConvention.Cdecl)]
private extern static void myFunc2();
Run Code Online (Sandbox Code Playgroud)

所以我再次尝试使用LoadLibrary()kernel32.dll而不是DllImport属性.

[UnmanagedFunctionPointer(CallingConvention.StdCall)]
private delegate void MyFunc1();

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate void MyFunc2();
Run Code Online (Sandbox Code Playgroud)

但是,当我调用MyFunc1()工作时MyFunc1()时会发生运行时错误.

所以我__stdcall__cdeclC++ 替换,重新编译DLL,然后在C#中再次调用MyFunc1().

并且......它奏效了.

为什么地球上没有__stdcall呼叫约会在C#中用pinvoke工作?

c# c++ pinvoke calling-convention stdcall

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

有没有办法更改 TimeSpan 对象的值?

我定期获取以毫秒为单位的新时间值,并且需要“00h 00m 00s”等形式,因此考虑使用TimeSpan,因为它使用起来非常简单。

TimeSpan t = TimeSpan.FromMilliseconds(timeValue);

但我现在担心的是GC。我认为每次都调用FromMilliseconds()不是一个好主意,因为它似乎总是创建一个新实例。我需要每隔 0.1 秒左右更新一次时间值,因此如果有一种方法可以直接修改 TimeSpan 对象的值,那么它对我的情况非常有用。否则,我想我需要自己创建一个方法..

是否可以?

c#

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

Dotfuscator 不支持 Unity3d?

我用我用 C# 编写的一些 DLL 测试了 Dotfuscator。看起来它在 .NET 环境下工作得很好,所以这次我用 Unity3D 尝试了它们。那些简单的 DLL 仅使用简单的标准 C# 类和方法进行编码,没有反射,没有 LINQ,没有其他自定义或第三方 API,包括 Unity 的。但未能让它们在我的 Unity3d 项目中工作,而未经混淆的原始纯 DLL 工作正常。在挣扎了几个小时之后,我决定用新的简单项目进行测试。下面是我在 C# 中得到的所有内容,没有其他代码,根本没有其他引用。

[System.Reflection.Obfuscation(Feature = "renaming", Exclude = true)]
public class Class1
{
    [System.Reflection.Obfuscation(Feature = "renaming", Exclude = true)]
    public static int Get()
    {
        return 123;
    }
}
Run Code Online (Sandbox Code Playgroud)

把这个编译成DLL后,放到Unity3D编辑器上的一个EMPTY项目中播放,效果很好。但是当我在用 Dotfuscator 混淆 DLL 后再次尝试时,它不再说“ InvalidProgramException: Invalid IL code in Class1:Get (): IL_000c: pop ”。

正如你在上面看到的,我添加了防止代码被重命名的属性,当然,我可以在 Reflector 中看到,类和方法的名称实际上并没有被重命名。

昨天我在PreEmptive网站上新注册并下载了最新的Dotfuscator Professional Edition 4.21.0评估版。我使用 .NET 3.5 在 Visual Studio 2008 和 2015 上编译,还尝试了所有不同的解决方案平台。Unity …

c# obfuscation mono dotfuscator unity-game-engine

0
推荐指数
1
解决办法
1119
查看次数