小编Ore*_*ost的帖子

如何使用WiX安装程序注册文件类型/扩展名?

我没有在WiX文档(或Google)中找到这个问题的明确答案.当然我可以在HKCR中编写相应的注册表项,但这让我觉得很脏,我希望这是一个标准的任务,应该有一个很好的默认解决方案.

对于奖励积分,我想知道如何使其"安全",即不要覆盖文件类型的现有注册,并且只有在安装期间注册并且未更改时才删除卸载时的注册.

installation installer windows-installer wix wix3

36
推荐指数
3
解决办法
2万
查看次数

使用联盟或加入 - 什么是更快

我只是想知道你是否有一张桌子并且你加入它会比使用连接更有效吗?

我知道连接会创建更多的列,但这更具理论性 - 工会是否需要像连接一样对另一个表进行嵌套循环扫描?

mysql sql

24
推荐指数
3
解决办法
4万
查看次数

基于OpenGL ES的桌面硬件加速OpenVG实现

我目前正试图在我的桌面上启动并运行OpenVG.问题出现在这里:我/将要开发一个Windows CE设备的应用程序(带有.NET紧凑框架),它具有硬件加速的OpenGL ES 2.0和OpenVG 1.0.1(基于TI OMAP35x,如果你有兴趣的话) ).该应用程序肯定会使用OpenVG进行绘制,如果OpenVG不提供它们(即模糊),可能会使用OpenGL进行某些效果.

现在我想在没有模拟器的桌面上开发(参见这个问题).所以我想我只是用P/Invoke导入OpenVG,这非常简单,因为OpenVG人员将他们的常量变成了真正的枚举,虽然是一个程序性的C API,但它很好地转换为面向对象的形式(带有Graphics类)用于绘制和路径,绘画,描边和图像对象).我还设法使用不同名称的DLL和入口点.哦,我导入了EGL 1.3,也很容易转换为面向对象的API.

在此之前,它听起来相当不错.我以为我只是使用Khronos的OpenVG参考实现,但速度很慢.真的很慢.你知道,像清除表面以字面上一个第二个!所以我认为,很好,OpenVG是一个标准,我将采取其他一个实现.其中大多数都基于OpenGL,这就是我想要的.或者不是吗?

不,这不对.使用EGL 1.3(随OpenGL ES 2.0的PowerVR Windows Emulation SDK提供)创建OpenGL ES 2.0表面与我尝试的任何OpenVG实现都不兼容.其中一些需要传统的OpenGL(AmanithVG GLE),PowerVR提供的EGL版本不支持OpenVG.大多数实现甚至没有EGL并使用一些奇怪的函数来初始化上下文 - 所有这些都假设已经创建了OpenGL上下文.OpenGL,而不是OpenGL ES.叹.

我能够工作的唯一一个是AmanithVG SRE,它对于软件实现非常快,并且不依赖于OpenGL或EGL.它可以工作,但它对于实时动画来说仍然太慢了.

我无法相信这些事情是如此错误.我真的很想使用WindowsMo​​bile.DirectX.Direct3D,PowerVR为桌面Windows提供仿真层,希望最终的Board支持包能够提供Direct3D作为OpenGL ES包装器,就像它似乎在许多设备.

那么,问题,最后:

是否有适用于OpenGL ES 2.0的Windows桌面系统的OpenVG实现?如果使用PowerVR的OpenGL ES 2.0仿真和提供的EGL 1.3,它可以顺利运行.

或者我应该尝试在桌面上使用传统的OpenGL 2.0实现?但他们通常也不提供EGL.我不想有两个初始化层(EGL和WGL).或者我应该?

注意:这不是.NET问题,因为如果没有.NET,问题就是一样.

windows desktop opengl-es openvg

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

使用CMake添加Visual C++属性表

我目前正在将一个gcc项目移植到Visual C++.它是在CMake文件中定义的,我创建了一个Visual C++属性表以帮助兼容(GccCompat.props).每次Visual C++项目文件由CMake重新生成时,必须手动添加属性表,因为我不知道如何自动添加它.所以,问题是:

如何告诉CMake向生成的Visual C++解决方案添加属性表?

cmake visual-studio-2010 propertysheet visual-c++

18
推荐指数
2
解决办法
4084
查看次数

用于嵌入式使用的紧凑型解压缩库

我们目前正在为客户创建一个设备,它将从PC应用程序中获取一块数据(例如,5-10KB).这有点简化,因此假设数据必须经过多次传递和解压缩,而不是每年一次.通信通道非常非常慢,因此我们希望事先压缩数据,传递给设备并让数据解压缩到内部闪存.然而,设备本身在微控制器上运行,该控制器不是很快并且没有大量内存.它有足够的闪存来存储结果,并且可以在接收时解压缩数据块,但它可能没有足够的RAM来存储整个压缩或未压缩(甚至两个!)数据块.当然,它没有操作系统或其他奢侈品.

这意味着我们需要一个足够快速的无压缩算法,它不会占用大量内存.压缩可能是缓慢而丑陋的,因为我们在PC端进行压缩.C或.NET代码首选,但压缩,以使事情更容易.解压缩代码应该在C中,因为某人不太可能为我们的控制器提供ASM优化版本.

我们发现LZO对我们来说几乎是完美的,但它默认有一个所谓的"免费"许可证(GPL),这使得它对我们的客户来说完全无法使用.作者说,商业许可证可以根据要求提供,但不幸的是他目前无法访问(出于非技术原因,如他网站上的新闻所说).

我找到了一些其他的库,包括zlib的puff.c,我们还在调查,但我想我会问你的经验:

鉴于解压缩设备的资源非常有限,需要源代码和商业许可证,您建议将哪种压缩算法和/或库用于嵌入式目的?

compression embedded

16
推荐指数
3
解决办法
2万
查看次数

为什么Int32.TryParse在无法转换时重置out参数?

如果我运行这个C#代码

int realInt = 3;  
string foo = "bar";  
Int32.TryParse(foo, out realInt); 

Console.WriteLine(realInt);  
Console.Read();
Run Code Online (Sandbox Code Playgroud)

我得到0.我想知道为什么!因为我找不到任何理由.这迫使我为每次解析创建临时变量.所以,请!伟大的宇宙编码器,赐教我!

c#

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

C#图形闪烁

我正在研究一种绘图程序,但是在绘制橡皮带线时移动鼠标光标时出现闪烁问题.我希望你能帮助我删除那条闪烁的行,这里是代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GraphicsTest
{
    public partial class Form1 : Form
    {
        int xFirst, yFirst;
        Bitmap bm = new Bitmap(1000, 1000);
        Graphics bmG;
        Graphics xG;
        Pen pen = new Pen(Color.Black, 1);
        bool draw = false;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            bmG = Graphics.FromImage(bm);
            xG = this.CreateGraphics();
            bmG.Clear(Color.White);
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            xFirst = e.X; …
Run Code Online (Sandbox Code Playgroud)

.net c# system.drawing winforms

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

获取.NET中的常见桌面路径

我需要将文件存储到Windows上的公共桌面.该应用程序是一个非常特殊的应用程序,适用于一个特殊的PC(设备准备),因此非技术用户必须很容易找到并修改配置文件.现在我们切换到一个域,因为不同的人(具有不同的帐户)应该使用该软件,它必须在一个共同的位置,每个用户都可以看到.所以请不要问为什么它在桌面上;)

以前,我刚刚用过Environment.GetFolderPath(Environment.SpecialFolder.Desktop).SpecialFolder枚举中有几个常见文件夹,但普通桌面似乎不存在.难道我失去了一些东西,或者我要的P/Invoke SHGetSpecialFolderPathCSIDL_COMMON_DESKTOPDIRECTORY

.net windows windows-shell

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

如何找到Windows SDK的SetEnv.cmd / SetEnv.cmd无法正常工作

我们正在运行一个Team City Build Server,并且希望编译一个Visual C ++项目。到目前为止,这很容易,因为我已经使用Windows SDK设置了Windows Build Agent,但是我们没有解决方案/项目文件。

而是使用CMake创建项目文件。CMake似乎有点笨(当未安装Visual Studio时无法生成解决方案),但是通过一些技巧,我可以做到这一点。然后可以使用MSBuild构建该解决方案。

问题来了。为了自动运行,我需要调用Windows SDK的SetEnv.cmd。而且我似乎无法自动找到它。它位于Windows SDK的bin子目录中,但是bin和root都不在路径中,并且%mssdk%环境变量由SetEnv.cmd设置,并且事先不可用!

将Windows SDK \ bin目录添加到PATH会导致SetEnv.cmd不再起作用(退出时显示类似The x86 compilers are not currently installed和的消息Jump target Set_x86 not found

开始菜单链接正在使用Windows SDK目录作为工作目录来调用SetEnv.cmd。但是,如果我将根目录添加到PATH,则Bin \ SetEnv.cmd不可用。

如何自动找到SetEnv.cmd?即使将环境变量设置为setenv.cmd的完整路径也不起作用,并且当我将%mssdk%定义为sdk目录时,则调用%mssdk%\ bin \ SetEnv也不起作用。我还尝试定义%mssdk%,然后定义cd%mssdk%,然后调用bin \ SetEnv。此外,在所有这些情况下都找不到编译器。如果我在命令行上手动cd到根目录或bin目录,然后调用SetEnv.cmd,它也将不起作用。

虽然开始菜单链接可以正常工作。

作为记录,我目前的解决方案如下:

我创建了一个MSBuild文件,该文件在命令行上使用CMake创建了解决方案文件,然后使用MSBuild任务调用了创建的解决方案。可以从TeamCity轻松构建MSBuild文件,尽管我需要一些其他技巧来满足CMake愚蠢的寻找编译器的麻烦,尽管我不会调用它。并不是很令人满意,但是可以。

windows msbuild sdk setenv

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

在线程中调用SHGetFileInfo以避免UI冻结

在.NET 4.0应用程序(WPF)中,我们使用SHGetFileInfo获取目录树的shell图标.由于这在某些情况下需要相当长的时间(即对于无法访问的网络驱动器或软盘驱动器),我们希望在一个线程中执行此操作,然后在读入时更新图标.

调用基本相同,现在只是在一个线程中执行.因为有人说线程必须STA为此工作,我们使用Thread而不是ThreadPool进行测试,结果相同.使用ThreadPool也没有用.

SHGetFileInfo 成功(返回1),但结构中的hIcon成员为零.

IntPtr GetIcon(string name)
{
    Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO();
    uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_USEFILEATTRIBUTES | Shell32.SHGFI_SMALLICON;

    Shell32.SHGetFileInfo(
        name, System.IO.Directory.Exists(name) ? Shell32.FILE_ATTRIBUTE_DIRECTORY : Shell32.FILE_ATTRIBUTE_NORMAL,
        ref shfi, 
        (uint) System.Runtime.InteropServices.Marshal.SizeOf(shfi), 
        flags );
    return shfi.hIcon;
}
Run Code Online (Sandbox Code Playgroud)

完全相同的代码可以从GUI线程中正常工作.要使函数从单独的线程工作,或者使其在不阻塞GUI线程的情况下工作,必须做些什么?


更新:围绕这个的代码基本上是这样的:

var thread = new System.Threading.Thread(() => {
    var result = GetIcon("C:\\");
    // ... do something with the result
});
thread.SetApartmentState(System.Threading.ApartmentState.STA);
thread.Start();
Run Code Online (Sandbox Code Playgroud)

如果只留下线程委托中的行,它可以正常工作(当然,在GUI线程上).


更新:目前,我们只是调用SHGetFileInfo它来使其工作.这样做的好处是,原始问题(在加载所有图标之前未显示文件视图的页面)已经解决,但这意味着页面会挂起每个图标.但至少用户现在看到了一些事情正在发生.我们仍在寻找问题的实际解决方案.

windows multithreading shell32 .net-4.0

6
推荐指数
2
解决办法
2009
查看次数