我将使用移动条形码扫描仪开发一些应用程序,需要在C++和C#之间进行选择,以便在扫描仪上进行编码.
我正在考虑Intermec的CK31或类似的WiFi,扫描选择,可编程性和用户界面选项的组合.它根据规格表运行Windows CE .NET 4.2.
Intermec的开发人员库附带.Net和C++ SDK.我以前的Win CE 2003经验是用C++(MFC GUI,套接字和串行通信).我对使用WPF的C#很满意,如果必须的话可以学习其他GUI框架.这让我可以自由选择语言 - 任何建议都是这样或那样的?
我不是在寻找C++而不是C#作为语言的答案 - 我的生产力都很相似,而且我有足够的经验来创建复杂,强大的C++解决方案.
我将欣赏的是战争故事或因素,我们的平台评估,以及这些设备上的编程.例如:C#apps与C++应用程序的电池寿命,内存消耗或语言选择的其他环境影响.如果有特定版本的.Net CE要避免,那将是一个很好的提示.
在从C++/CLI代码调用的DLL中,我似乎无法在某些纯C代码中设置数据断点.菜单选项New Data Breakpoint ...被禁用,断点窗口中的弹出窗口也是如此.我无法找到其他人报告这一点,唯一类似的经验是移动开发人员.
否则调试工作正常 - 我可以在函数上设置Watches和breakpoints.
我在Vista x64上使用Visual Studio 2008 Professional sp1.
我一直在考虑的事情之一是我们如何使用某种衡量标准衡量变化,我们是否倒退?这是在我们正在改进的大型遗留代码库的背景下.大多数代码都是带有C遗产的C++.一些新功能和GUI是用C#编写的.
首先,我们至少可以检查代码中的简单复杂性级别是否随时间而变化.困难在于有一个表示 - 我们可以做一个3D表面,其中2D地图代表代码,我们有一个颜色的热图表示复杂性,3D表面凸出进出以显示变化.
一旦你能够生成一些数字的数字,就会有大量的数学系统来处理这样的事情.
随着时间的推移,我希望在那里有更复杂的数字,但相同的可视化技术用于表示变化.
我喜欢Crap4j中关于复杂性与覆盖该代码的单元测试数量之间的比例的想法.
我还想包括Bob叔叔的SOLID指标以及一些Chidamber和Kemerer OO指标.困难的部分是找到为C++生成这些工具的工具.唯一的选择似乎是Krakatau Essential Metrics(我不反对支付工具).我希望使用CK指标的部分原因来自Henderson-Sellers 的"面向对象度量标准:复杂性度量"和早期的面向对象软件度量标准.
如果我们开始使用这些指标中的一些,那么最终可能会有十个左右的数字随时间而变化.我对统计数据一无所知,但跟踪一堆这样的指标然后注意哪些指标往往变化可能会很有趣.
请注意,相关问题是关于在大型代码库中测量代码质量.我对测量变化更感兴趣.
使用C数组作为函数参数的经典memcpy问题.正如下面所指出的,我的代码中有一个错误,但错误的代码在本地环境中工作!
我刚刚在移植作业中遇到这种奇怪的行为,我正在使用对象模拟Macintosh Picture操作码播放.我的DrawString对象在回放时绘制了垃圾,因为它显然无法复制字符串参数.以下是我写的测试用例 - 注意手动复制循环如何工作但memcpy失败.在Visual Studio调试器中进行跟踪显示memcpy使用垃圾来覆盖目标.
两个本地Str255阵列上的Memcpy工作正常.
当其中一个成为堆栈中对象的成员时,它就会失败(在其他测试中,当对象在堆上时它也会失败).
以下示例代码显示了在operator =中调用的memcpy.我在构造函数中失败后将其移动到那里,但没有区别.
typedef unsigned char Str255[257];
// snippet that works fine with two local vars
Str255 Blah("\004Blah");
Str255 dest;
memcpy(&dest, &Blah, sizeof(Str255)); // THIS WORKS - WHY HERE AND NOT IN THE OBJECT?
/*!
class to help test CanCopyStr255AsMember
*/
class HasMemberStr255 {
public:
HasMemberStr255()
{
mStr255[0] = 0;
}
HasMemberStr255(const Str255 s)
{
for (int i = 0; i<257; ++i)
{
mStr255[i] = s[i];
if (s[i]==0)
return;
}
}
/// fails …Run Code Online (Sandbox Code Playgroud) 我的基本问题是如何使用x86上的浮点数运算,就像PowerPC一样,从Classic MacOS(CodeWarrior)到Windows(VS 2008).
有问题的代码,其中有很多,有一堆高度迭代和数值非常敏感的算法.
典型的复杂线是:
Ims_sd = sqrt((4.0*Ams*sqr(nz)-8.0*(Ams+Dms)*nz+12.0*sqr(Ams)) /
(4.0*sqr(Ams)*(sqr(nz)-1)) -
sqr(Ims_av))*sqrt(nz-1);
Run Code Online (Sandbox Code Playgroud)
它是使用typedef'd float作为基类型编写的.
更改为double在两个平台上获得非常相似的结果但不幸的是数字是不可接受的,所以我们不能采取那么简单的方法.
Mac代码是使用CodeWarrior编译的,只是关闭FMADD和FMSUB指令的生成对创建的数字产生了极大的影响.所以,我的出发点是搜索看起来最相似的Visual Studio(2008)选项 - 确保使用融合添加.我们怀疑关键在于编译器在计算中分配中间存储的行为
目前,最好的结果是通过启用SSE2和/fp:fast.启用内部函数会导致值从Mac值进一步偏移.
该/ fp的开关文档中说,仅/fp:strict关闭融合添加行为.
MSDN讨论了在LIBC.LIB,LIBCMT.LIB或MSVCRT.LIB之前链接FP10.OBJ.保证64位精度.我显然通过在链接器输入字段上指定FP10.OBJ来实现这一点(详细的链接器输出在MSVCRTD.lib之前显示它).
我也通过调用设置64位精度
_controlfp_s(&control_word, _PC_64, MCW_PC);
Run Code Online (Sandbox Code Playgroud)
在DllMain.
请注意,问题不是由于平台之间的浮点异常处理的差异,也不是由于(令人愉快的)PowerPC允许除零整数(仅返回零)的方式,因为这些区域已经过审计和处理,非常感谢PC-Lint.该程序运行并产生一些可信的输出,只是不够好.
更新:
朋友的一个有趣的评论: 一种可能性是PPC有大量的临时寄存器可以存储64位中间值,而x86代码可能必须卸载并重新加载FPU(截断为4个字节并且丢失精度).
这可能是SSE2更好地工作的原因(IIRC)它有更多的寄存器和更多的保留中间值的范围.
一种可能性 - 您的代码可以编译为64位吗?x64模式还有更多的中间寄存器和更好的FP指令,因此在设计和执行时可能更接近PPC.
64位构建的初始测试实际上越来越接近了,正如他所建议的那样(我首先认为它超调,但这是由于不正确的建模设置).
最终决议
我确信任何对这个主题感兴趣的人都足够强迫他们想知道最终这一切是如何成功的.该软件已完成并提供一致的数字结果.我们从未能够获得所有算法来向Mac提供相同的结果,但它们足够接近统计上可接受的结果.鉴于处理由专家用户指导选择感兴趣的区域并且用户输入部分地反应模型的进展,首席科学家认为这是可接受的(这不是一夜之间的决定!).剩余的数值差异完全在决定不同临床结果的范围内,因此在测试中未发现不同的诊断.
在阅读了如何防止您的开发机器减速之后,我想起了一年前为我的开发机器构建VM的好意.
但是,我正在Vista x64上开发WPF和SilverLight GUI.我可以在VM下运行x64版本的操作系统,但我担心WPF的图形性能,特别是运行Expression Blend.我希望需要GPU!
我目前有用于XP 32位测试的Virtual PC VM.对于WPF,VMWare的版本或版本可能更好吗?如果是这样,是否有任何版本差异?我已经可以在OS/X上使用我的VMWare Fusion创建虚拟机,所以只需使用免费的VMWare播放器就可以了 - 我无法找到有关播放器和工作站之间GPU支持差异的任何评论.
我的主要Windows开发机器只是一台配备4GB内存的戴尔笔记本电脑(Latitude 830),但我必须在笔记本电脑上进行客户访问,所以我不打算购买额外的台式机.
我今天正在和某人谈论如何在他们的WPF程序中选择如何处理逻辑的设计模式,并希望SO社区可以帮助提供进一步的建议以使决策更容易.支持命令的哪些因素超过了不便之处?
他上过的入门课程和许多书籍都展示了简单的Click事件处理程序,作为将逻辑连接到UI对象的自然方式.
在使用代码隐藏文件中创建的命令时使用命令所需的开销量让他感到有些惊讶:
public static readonly ICommand cmdShow2 = new RoutedUICommand(
"Show Window2", "cmdShow2",
typeof(TestDespatchWindow));
Run Code Online (Sandbox Code Playgroud)
然后在XAML中使用罗嗦的方式编写更多代码,必须识别和绑定命令:
<Window x:Class="WPFDispatchDemo.TestDespatchWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:w="clr-namespace:WPFDispatchDemo"..>
<Window.CommandBindings>
<CommandBinding Command="{x:Static w:TestDespatchWindow.cmdShow2}"
Executed="OnShow2" />
</Window.CommandBindings>
<DockPanel>
<StackPanel Margin="0,8,0,0">
<Button x:Name="Show2EventBased"
Margin="10,2,10,2"
Click="OnShow2"
Content="Show2 via WPF Event"/>
<Button x:Name="Show2Command"
Command="{x:Static w:TestDespatchWindow.cmdShow2}"
Margin="10,2,10,2"
Content="Show2 via WPF"/>
</StackPanel>
</DockPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
我不能(还)声称自己是WPF专家,所以我可能把事情描绘得比实际情况更复杂,但我怀疑你不能简化事情而不是上述事情.
编辑:
我在DelegateCommand,RoutedCommand和Event之间找到了一个有趣的三向比较.
微软正在非常努力地推动他们的ALM(应用程序生命周期管理)工具,例如TFS,但通常会掩盖主要功能仅适用于托管(.Net)代码的事实.例如:Intellitrace是c#和VB-only
使用纯本机应用程序实验室管理有什么好处吗?
我们有两个主要的应用程序,一个是Java UI,另一个是MFC.有人建议实验室经理将在公司内部广泛推出,但我强烈怀疑我们会获得任何收益.
根据2011年3月的测试自动化支持表,不支持Java,MFC仅用于基本控件.
[edit]在最新的vNext版本之前,我们无法使用他们的TestManager进行单元测试,除非我们使用C++/CLI单元测试将我们的C++代码包装在.Net层中.
所以似乎没有一种测试代码的方法可以用于我们的应用程序.
我正在使用脚本在Xcode 4.3中使用Xcode 4.3构建GraphViz当前版本(2012年6月7日)时发现库未找到错误.我可能犯了错误,更新构建脚本来自其他人对Xcode4.3的新位置和Applications文件夹中的开发人员工具的成功配方.
ld: library not found for -lcrt1.10.6.o
(从内存中执行此操作,因此CRT lib上的确切数字可能是错误的)
我也有点迷失了如何将它合并到IDE中的Xcode构建中.我是一个非常有经验的程序员,但有时很难找到Xcode 4.(几十年的Visual Studio等).
我复制了之前这个问题的说明并进行了改编
#!/bin/sh
# For iPhoneOS, see http://clang.llvm.org/ for options
export DEV_iOS=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
# was /Developer/Platforms/iPhoneOS.platform/Developer
export SDK_iOS=${DEV_iOS}/SDKs/iPhoneOS5.1.sdk
export COMPILER_iOS=${DEV_iOS}/usr/bin
export CC=${COMPILER_iOS}/clang
export CXX=${COMPILER_iOS}/clang++
export LDFLAGS="-arch armv7 -pipe -Os -gdwarf-2 -mthumb -isysroot ${SDK_iOS}"
export CFLAGS="${LDFLAGS}"
export OBJCFLAGS="${LDFLAGS}"
export CXXFLAGS="${LDFLAGS} -fvisibility-inlines-hidden"
export LD=${COMPILER_iOS}/ld
export CPP=${COMPILER_iOS}/clang
export AR=${COMPILER_iOS}/ar
export AS=${COMPILER_iOS}/as
export NM=${COMPILER_iOS}/nm
export CXXCPP="${COMPILER_iOS}/clang++"
export OBJC=${COMPILER_iOS}/clang
export RANLIB=${COMPILER_iOS}/ranlib
./configure \
--build=arm-apple-darwin11 \
--host=arm-apple-darwin11 \
--disable-dependency-tracking \ …Run Code Online (Sandbox Code Playgroud) 我正在使用嵌入式Glassfish(org.glassfish.main.extras:glassfish-embedded-all:3.1.2.2)并尝试添加JDBC领域.应用程序部署正常但在尝试登录时(基本身份验证显示正确的域名称)会出现以下错误消息:
com.sun.web.security.RealmAdapter authenticate警告:WEB9102:Web登录失败:com.sun.enterprise.security.auth.login.common.LoginException:登录失败:没有为jdbcRealm配置LoginModule
我的代码看起来像这样:
嵌入式Glassfish
// create-jdbc-connection-pool ...
// create-jdbc-resource ...
String realmProperties = "jaas-context=jdbcRealm:datasource-jndi=jdbc/myDB:user-table=Users:user-name-column=userid:password-column=password:group-table=Groups:group-name-column=groupid;
glassfish.getCommandRunner().run("create-auth-realm", "--classname", "com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm", "--property", realmProperties, myRealm);
Run Code Online (Sandbox Code Playgroud)
已部署应用程序的web.xml
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>myRealm</realm-name>
</login-config>
Run Code Online (Sandbox Code Playgroud)
我想如果没有指定默认的LoginModule(在domain/conf/login.conf中指定非嵌入式Glassfish的情况下)适用?