小编C J*_*son的帖子

我可以使用PowerShell编写一个类吗?

我还在学习powershell,到目前为止,尽管进行了一些搜索,但我还没有在这个网站上找到答案.由于Powershell是在.NET框架之上构建的,我可以使用Powershell编写自己的自定义类吗?

我不是在谈论实例化.NET类......那部分很简单.我想使用PowerShell脚本编写自己的自定义类.可能?到目前为止,我的研究让我说这是不可能的.但我想与大师的第一个确认......

powershell

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

使用PowerShell在声明时初始化字典

鉴于此powershell代码:

$drivers = New-Object 'System.Collections.Generic.Dictionary[String,String]'
$drivers.Add("nitrous","vx")
$drivers.Add("directx","vd")
$drivers.Add("openGL","vo")
Run Code Online (Sandbox Code Playgroud)

是否可以直接初始化此字典而无需调用Add方法.像.NET一样允许你这样做吗?

像这样的东西?

$foo = New-Object 'System.Collections.Generic.Dictionary[String,String]'{{"a","Alley"},{"b" "bat"}}
Run Code Online (Sandbox Code Playgroud)

[不确定这会涉及什么类型的语法]

powershell dictionary initialization

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

如何使用Powershell修改父范围变量

我对powershell很新,我只是没有得到如何修改父作用域中的变量:

$val = 0
function foo()
{
    $val = 10
}
foo
write "The number is: $val"
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到:

The number is: 0
Run Code Online (Sandbox Code Playgroud)

我希望它是10.但是PowerShell正在创建一个隐藏父范围内的变量的新变量.

我试过这些,没有成功(根据文档):

$script:$val = 10
$global:$val = 10
$script:$val = 10
Run Code Online (Sandbox Code Playgroud)

但这些甚至都没有'编译'可以这么说.我错过了什么?

powershell

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

MSBuild:首次执行时目标输入和输出失败

我有一个构建目标,我正在尝试在MSBuild中执行.目标有一些输入和输出我已经放在那里以加快中间构建的时间.输入文件总是存在(头文件),另一方面,输出并不总是存在(XML文件).

可能跳过任务的中间构建是非常理想的,因为它在性能方面非常昂贵.

无论如何,如果输出已经存在,输入和输出工作得很好.在这种情况下,MSBuild发出一条非常有用的消息,说明目标被跳过,因为所有文件都是最新的.

当输出目录和文件不存在(第一次运行此任务)时,MSBuild失败并出现以下消息:

跳过目标[targetname],因为它没有输出.

添加详细的详细程度告诉我原因是因为@(OutputXML)项是空的.好的,现在呢?因此,似乎并不是MSBuild中的中间构建的整个概念非常强大.

我的问题是,如何在没有输出的情况下获得中间构建的好处并仍然执行此目标?(我希望我不必编写自己的任务扩展)

这是我的构建脚本的相关部分:

<ItemGroup>
    <Headers  Include="..\**\*.h" />
    <OutputXML Include="$(OutputDir)\*.xml" />
</ItemGroup>

<Target Name="Doxygen" 
        Inputs="@(Headers)"
        Outputs="@(OutputXML)" >
    <Exec ... />
</Target>
Run Code Online (Sandbox Code Playgroud)

注意:我一直在google,msdn,这个网站试图找到答案,到目前为止一直没有成功.虽然我发现了一般有关MSBuild的非常有用的信息.

msbuild

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

#line - 目的?

不幸的是,我今天做了一些代码考古(虽然重构了一些旧的危险代码),并发现了一个像这样的小化石:

# line 7 "foo.y"
Run Code Online (Sandbox Code Playgroud)

我完全惊讶地发现那里有如此古老的宝藏.我在一个C编程网站上读到了它.然而,它没有解释为什么有人想要使用它.因此,我不得不猜测程序员纯粹是为了向编译器说谎的纯粹快乐.

注意:(请注意,化石实际上是在cpp文件的第3行)(哦,该文件确实指向与该文件几乎相同的.y文件.

有谁知道为什么需要这样的指令?或者它可以用于什么?

c

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

使用placement new替换new与宏冲突

我有一个庞大的应用程序(数百万LOC,和数万个文件),我正在尝试使用debug crt来检测内存泄漏.我正试图像这样宏观化:

#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#ifndef NEW_DEBUG
#define NEW_DEBUG new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new NEW_DEBUG
#endif
Run Code Online (Sandbox Code Playgroud)

现在,我的应用程序是如此之大,所以对我而言,理想情况下,我会把它放在一个头文件中,特别是包含在成千上万的CPP文件中.不是一个有趣的任务.所以我试图将它放在SDK中的公共头文件中,该文件将包含在每个转换单元中.

我遇到的问题是它似乎与一些STL头文件冲突,并且编译器在使用placement new时发出错误.我可以通过使用pragma和禁用新宏在我自己的代码中更改它.那不是问题.这是使用贴牌新的STL头文件,我无法改变.

通过重新排列cpp文件中的include指令,我找到了解决方法.例如:

// doesn't compile
#include "new_redirect.h"
#include <map> // for instance

// does compile
#include <map> // for instance
#include "new_redirect.h"
Run Code Online (Sandbox Code Playgroud)

但这是一个困难的解决办法,因为我必须再修改数千个文件,并确保他们的STL标题包含其他任何内容之前.具有讽刺意味的是,我创建了一个hello world应用程序来专门测试这个问题:我的hello-world应用程序编译得很好.但是如果没有这种解决办法,我的庞大应用程序就不会.

所以我的问题是:

  1. 有没有人能够完全宏观化,而不会摇晃大量的代码?(以相对无痛的方式)
  2. 任何其他方式绕过重新安排我的STL标头包括指令?

谢谢

c++ windows memory-leaks crtdbg.h

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

LNK2022和LNK2034链接器错误与CRT版本10.0

很抱歉打扰这个问题的人,但我已经研究了几个小时了,还没有决议:

我正在将一个相当庞大的应用程序移植到Visual Studio 2010中的10.0 CRT(编译器).该应用程序是使用/ clr管理的C++/CLI.大多数代码都是本机代码(95%),其中包含一些托管部分.

所以我的工作是将.vcxproj中的开关定位到较新的10.0 CRT(即编译器).我们以前使用的是v90,或者使用VS 2008 SP1附带的VC编译器.

好的,这么重大变化?实际上看起来像一堆.我修复了一些处理集合的迭代器问题,这一切都非常简单.

但这些链接器错误正在扼杀我.任何帮助,将不胜感激:

1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0001c0).
1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0001c5).
...

1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2034: metadata inconsistent with COFF symbol table: symbol '??0?$allocator@D@std@@$$FQAE@ABV01@@Z' (06000141) has inconsistent metadata with (0A000F75) in identity.obj
1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2034: metadata inconsistent with COFF symbol table: symbol '??0?$allocator@D@std@@$$FQAE@ABV01@@Z' (06000141) has inconsistent metadata with …
Run Code Online (Sandbox Code Playgroud)

windows winapi stl linker-errors visual-studio-2010

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

何时在项目文件中使用<ProjectReference>?

摘要:

使用visual studio和托管C++和C#项目,项目构建错误

描述:

我有一个庞大的(100多个项目)解决方案文件,正在以错误的顺序构建一些项目.解决方案文件包含以下类型的项目:

  • 原生C/C++
  • 托管C++
  • 管理C#

该解决方案包含不同类型项目之间的所有适当依赖关系.好吧,所以当我从命令行(使用MSBuild)构建时,存在问题.托管项目(包括C++和C#)的依赖关系以错误的顺序构建.例如,项目将无法构建,因为缺少托管依赖项.例如,托管C++文件将具有失败的using声明:

#using <foo.dll>
Run Code Online (Sandbox Code Playgroud)

因为foo.dll还不存在.

这意味着之前应该构建foo.dll,但事实并非如此.就像我之前提到的,依赖关系在解决方案文件中正确设置.例如,如果foo依赖于baz,我在解决方案文件中有这个...

Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "Foo", "...\Foo.vcxproj", "{5A42640E-9E0A-442B-8A40-AA91AD5444AC}"
    ProjectSection(ProjectDependencies) = postProject
        ...
        {2CE32AE0-B129-40BA-B06E-A628FA149AB3} = {2CE32AE0-B129-40BA-B06E-A628FA149AB3}
    EndProjectSection
EndProject
...
Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "baz", "...\baz.csproj", "{2CE32AE0-B129-40BA-B06E-A628FA149AB3}"
    ProjectSection(ProjectDependencies) = postProject
        ...
    EndProjectSection
EndProject
Run Code Online (Sandbox Code Playgroud)

因此,解决方案文件正确具有依赖性.但是Foo.vcxproj项目中的依赖性仅由#using指令表示.我在视觉工作室博客上看到,在msbuild中订购项目时存在一个已知的错误. http://blogs.msdn.com/b/visualstudio/archive/2010/12/21/incorrect-solution-build-ordering-when-using-msbuild-exe.aspx

他们的工作是添加一个调用我的项目的项目,如下所示:

<ProjectReference Include="... foo.csproj"> 
    <ReferenceOutputAssembly>false</ReferenceOutputAssembly> 
</ProjectReference>
Run Code Online (Sandbox Code Playgroud)

无论如何,我的问题是:我是否只需要为我的托管C++项目执行此操作?或者我是否为托管C++和C#项目执行此操作?(我相信我不需要为C#项目执行此操作,因为它们的依赖关系是明确的)

注意:我已经尝试将它放在我的构建中的所有项目中,并且它没有那么热,因为我在本机项目中遇到了很多奇怪的构建错误...

感谢您对此的任何回应.

msbuild dependencies projects-and-solutions

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

在成千上万的文件中搜索并替换数百个字符串?

我正在研究在我工作的(C/C++)项目中更改数百个文件的文件名.问题是我们的软件有成千上万的文件,包括(即#include)这些数百个将被改变的文件.这看起来像是一场维护噩梦.如果我这样做,我将被困在Ultra-Edit中数周,手动滚动数百个正则表达式:

^\#include.*["<\\/]stupid_name.*$
Run Code Online (Sandbox Code Playgroud)

#include <dir/new_name.h>
Run Code Online (Sandbox Code Playgroud)

这种苦差事要比用勺子在南极的沉没潜艇中剥掉数百个土豆更糟糕.我认为将输入和输出放入如下表格中是理想的:

stupid_name.h <-> <dir/new_name.h>
stupid_nameb.h <-> <dir/new_nameb.h>
stupid_namec.h <-> <dir/new_namec.h>
Run Code Online (Sandbox Code Playgroud)

并将其提供给正则表达式引擎/工具/ app /等...

我的终极问题:是否有工具可以做到这一点?

奖金问题:它是多线程的吗?

我在这个网站上查看了很多搜索和替换主题,并找到了许多标准查询,询问了以下问题的变体:

标准问题:替换N个文件中的一个术语.

而不是:

我的问题:替换N个文件中的N个术语.

提前感谢您的回复.

regex replace

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

为什么不调用Python描述符__set__

我有一个类的描述符,它的__set__方法不会被调用.我一直在寻找这个问题几个小时并且没有答案.但是我在下面注意到的是,当我将12分配给MyTest.X时,它会擦除​​X的属性描述符,并将其替换为值12.因此,将调用Get函数的print语句.非常好.

但是__set__函数的print语句根本没有被调用.我错过了什么吗?

class _static_property(object):
    ''' Descriptor class used for declaring computed properties that don't require a class instance. '''
    def __init__(self, getter, setter):
        self.getter = getter
        self.setter = setter

    def __get__(self, instance, owner):
        print "In the Get function"
        return self.getter.__get__(owner)()

    def __set__(self, instance, value):
        print "In setter function"
        self.setter.__get__()(value)

class MyTest(object):
    _x = 42

    @staticmethod
    def getX():
        return MyTest._x

    @staticmethod
    def setX(v):
        MyTest._x = v

    X = _static_property(getX, setX)


print MyTest.__dict__
print MyTest.X
MyTest.X = 12 …
Run Code Online (Sandbox Code Playgroud)

python

5
推荐指数
2
解决办法
737
查看次数