Tag: C#的

在Android ndk / jni中使用C ++

所有的ndk样本只使用头文件中声明为extern的基本C函数,并在cpp文件中定义。 然后在包含jnicallback的C文件中包含头文件后,一切正常。 有没有可能使用android ndk的C + +类? 我的应用程序不会是一个本地的活动,它仍然有一个重要的Java部分,但它会调用CPU密集型计算的本地C代码(已经用C ++编写,有类和其他C ++的东西)。 这里是我的你好,像现在strcuture世界: 文件“first.h” #ifndef FIRST_H #define FIRST_H class Test {}; #endif /* FIRST_H */ 文件“second.cpp” #include <jni.h> #include "first.h" #ifdef __cplusplus extern "C" { #endif jint Java_com_example_twolibs_TwoLibs_add( JNIEnv* env, jobject this, jint x, jint y ) { Test t; return 0; } #ifdef __cplusplus } #endif 最后是Android.mk […]

用于处理列表的C#asynchronous选项

我想更好地理解我在C#中使用的asynchronous和并行选项。 在下面的片段中,我列出了我遇到的最多的5种方法。 但是我不确定要select哪一个,或者更好,在select时要考虑什么标准: 方法1:任务 (请参阅http://msdn.microsoft.com/en-us/library/dd321439.aspx ) 调用StartNew在function上等价于使用其中一个构造函数创build一个Task,然后调用Start来计划执行。 但是,除非创build和调度必须分开,否则S​​tartNew是简单性和性能的推荐方法。 TaskFactory的StartNew方法应该是创build和调度计算任务的首选机制,但是对于必须将创build和调度分离的情况,可以使用构造函数,然后可以使用任务的Start方法将任务调度为稍后执行时间。 // using System.Threading.Tasks.Task.Factory void Do_1() { var _List = GetList(); _List.ForEach(i => Task.Factory.StartNew(_ => { DoSomething(i); })); } 方法2:QueueUserWorkItem (请参阅http://msdn.microsoft.com/en-us/library/system.threading.threadpool.getmaxthreads.aspx ) 您可以按照系统内存允许的方式排队多个线程池请求。 如果有比线程池线程更多的请求,则附加请求保持排队,直到线程池线程可用。 您可以将排队方法所需的数据放入定义方法的类的实例字段中,也可以使用接受包含必要数据的对象的QueueUserWorkItem(WaitCallback,Object)重载。 // using System.Threading.ThreadPool void Do_2() { var _List = GetList(); var _Action = new WaitCallback((o) => { DoSomething(o); }); _List.ForEach(x => ThreadPool.QueueUserWorkItem(_Action)); […]

词法分析器和分析器之间的通信

每次我写一个简单的词法分析器,我都会碰到同样的问题:词法分析器和parsing器应该如何交stream? 我看到了四种不同的方法: 词法分析器急切地将整个inputstring转换为一个标记向量。 一旦完成,vector被送到parsing器,parsing器将其转换成树。 这是迄今为止最简单的解决scheme,但是由于所有的令牌都存储在内存中,所以浪费了大量的空间。 词法分析器每次find一个标记时,都会在parsing器上调用一个函数,传递当前的标记。 根据我的经验,这只有在parsing器可以像LALRparsing器那样自然地被实现为状态机时才有效。 相比之下,我认为它不会用于recursion下降parsing器。 每一次parsing器都需要一个标记,它会要求词法分析器进行下一个标记。 由于yield关键字,这在C#中很容易实现,但在C ++中很难实现。 词法分析器和parsing器通过asynchronous队列进行通信。 这在“生产者/消费者”的标题下是众所周知的,它应该简化词法分析器和parsing器之间的通信。 它是否也超越了其他多核解决scheme? 还是太轻松了? 我的分析是否正确? 有没有其他的方法我没有想到? 在实际编译器中使用什么? 如果像Eric Lippert这样的编译器作者能够解释这个问题,这将是非常酷的。

在VBA中尝试创build无模式对话框时使用CreateDialog

我想在VBA 7.0中创build一个无模式的popup对话框。 到目前为止,最有希望的路线似乎是CreateDialog 。 首先,我尝试CreateDialogW并收到Entry point not found for CreateDialogW in DLL 。 打开DLL后,我validation了这个function没有列出。 上面链接的MSDN引用显示User32作为此函数的DLL,并列出函数名称CreateDialogW和CreateDialogA (分别为Unicode / ansi),但它们不在我的计算机(Win 7专业版,64位)上的此DLL中列出。 因此,查看DLL中的函数列表,我看到了CreateDialogParam和CreateDialogIndirectParam函数 (每个函数的 Ansi和Unicode版本)。 我一直在试图遵循MSDN,并将C例子转换为VB,但是我错过了一些地方,我有点卡住,因为我不知道我做错了什么。 代码编译和运行没有错误,但没有发生在API调用 – 它执行但没有任何反应。 如果有人能给我一些正确的方向,我将不胜感激。 我目前的解决办法很糟糕,我真的想把这个项目button。 Option Explicit 'Reference conversion of C to VB type declarations here 'http://msdn.microsoft.com/en-us/library/aa261773(v=vs.60).aspx 'Declare function to Win API CreateDialog function 'http://msdn.microsoft.com/en-us/library/ms645434(v=vs.85).aspx Private Declare PtrSafe Function CreateDialog Lib "User32.dll" […]

为什么没有int128_t?

许多编译器都提供了128位的整数types,但是我用过的都没有提供int128_t 。 为什么? 据我记得,标准 储备int128_t为此目的 鼓励提供这种types的实现提供typedef 规定这种实现提供至less128位的intmax_t (而且,我不相信我已经使用了一个实际符合最后一点的实现)

将所有库保存在Arduino草图目录中

我知道你应该把任何外部库放在arduino安装目录的“libraries”文件夹下,但是我有一个项目使用了我为这个项目创build的几个库,主要是保持所有的代码自包含主要的pde文件。 然而,我试图把库放在与主PDE文件相同的目录中,这样我就可以更容易地把所有的东西都同步到颠覆(我在多台计算机上工作),我不想继续返回并分别同步库。 另外,只是为了能够轻松地压缩草图文件夹,并知道它包含所需的一切。 我已经尝试将头文件添加到草图作为一个新的选项卡,但这似乎并不工作…甚至不关心,如果他们应该在Arduino IDE。 我也尝试添加库到子目录中的草图目录(我非常喜欢),然后链接到它们: #include "mylib/mylib.h" 和 #include <mylib/mylib.h> 但是这两个都导致文件没有find错误。 这可能吗? 而且,如果是这样的话,我如何将它们包含在主要的build筑文件中呢? 最好在他们自己的子目录中。

在C ++中传递对数组的引用

任何人都可以帮我理解下面的代码 #include <iostream> void foo(const char * c) { std::cout << "const char *" << std::endl; } template <size_t N> void foo(const char (&t) [N]) { std::cout << "array ref" << std::endl; std::cout << sizeof(t) << std::endl; } int main() { const char t[34] = {'1'}; foo(t); char d[34] = {'1'}; foo(d); } 输出是 const […]

潜在的.NET x86 JIT问题?

下面的代码在内置发行版模式(或优化debugging时)时运行方式不同,在没有附加Visual Studiodebugging器的情况下运行。 它也似乎只复制如果使用x86 JITter。 我已经在一台x86机器上testing了这一点,并在x64机器上的WOW64上运行(通过将平台目标设置为x86)。 我只用.NET 4.0试过。 在Release中debugging器外部运行时,看到: Value is 4 在debugging器内部运行时, WriteLine调用的e.Value.Length部分抛出NullReferenceException ,这是我期望发生的事情。 代码: namespace Test { class UsingReleasable<T> { public UsingReleasable(T obj) { m_obj = obj; } public T Release() { T tmp = m_obj; m_obj = default(T); return tmp; } public T Value { get { return m_obj; } } T m_obj; […]

有一个web服务或API来帮助我阅读电子邮件联系人吗?

我试图在我的网站上添加一个function,让用户邀请他的电子邮件联系人访问该网站,就像Twitter和Facebook一样。 我厌倦了试图为每个电子邮件服务,为Gmail,雅虎,MSN实施此function。 当我成功实现另一个API时,我们开始debugging这个问题。 顺便说一下,有一个API或一个web服务我可以使用哪个可以给我这个function?

自由运营商 – > *超负荷的邪恶?

我在反驳内build运算符不参与重载parsing的概念后,正在细读13.5节,注意到operator->*没有任何部分。 它只是一个通用的二元运算符。 它的弟弟, operator-> , operator*和operator[]都是非静态成员函数。 这排除了通常用于从对象获得参考的操作员的自由function过载的定义。 但不常见的operator->*被省略。 特别是operator[]有许多相似之处。 它是二进制的(他们错过了一个进行n-ary的黄金机会),它接受左边的某种容器和右边的某种定位器。 除了禁止自由职能外,其特殊规则第13.5.5条似乎没有任何实际效果。 (这种限制甚至不能支持交换!) 所以,例如,这是完全合法的 : #include <utility> #include <iostream> using namespace std; template< class T > T & operator->*( pair<T,T> &l, bool r ) { return r? l.second : l.first; } template< class T > T & operator->*( bool l, pair<T,T> &r ) { return r->*l; […]