Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 在VC++2010中将消息编译器(mc.exe)配置为自定义编译器步骤?_Visual Studio 2010 - Fatal编程技术网

Visual studio 2010 在VC++2010中将消息编译器(mc.exe)配置为自定义编译器步骤?

Visual studio 2010 在VC++2010中将消息编译器(mc.exe)配置为自定义编译器步骤?,visual-studio-2010,Visual Studio 2010,有人能列出在VC++2010中将消息编译器mc.exe配置为将.mc文件编译成.rc文件作为自定义编译器步骤的具体和详细步骤吗? 我真的不知道该怎么做。右键单击项目,添加+新项目,选择文本文件,将其命名为Blah.mc。输入或粘贴定义。右键单击Blah.mc、属性、自定义生成步骤: 命令行=mc$InputPath 输出=$InputName.rc 编辑.rc文件,添加: #include "Blah.rc" 为我工作,应该很接近。如果要使用自定义生成规则,可以这样做 在Visual Stud

有人能列出在VC++2010中将消息编译器mc.exe配置为将.mc文件编译成.rc文件作为自定义编译器步骤的具体和详细步骤吗?
我真的不知道该怎么做。

右键单击项目,添加+新项目,选择文本文件,将其命名为Blah.mc。输入或粘贴定义。右键单击Blah.mc、属性、自定义生成步骤:

命令行=mc$InputPath 输出=$InputName.rc 编辑.rc文件,添加:

#include "Blah.rc"

为我工作,应该很接近。

如果要使用自定义生成规则,可以这样做

在Visual Studio中的项目上单击鼠标右键->自定义生成规则 单击新建规则文件并填写字段,我将此规则文件用于MC.EXE

<VisualStudioToolFile Name="Message Table Build Rule" Version="8.00">
  <Rules>
    <CustomBuildRule
      Name="Message Table Build Rule"
      DisplayName="Message Table Build Rule"
      CommandLine="[Location]\mc.exe [Unicode] [Verbose] [Inputs]"
      Outputs="Message Table Build Rule"
      FileExtensions="*.mc"
      ExecutionDescription="Message Table Build Rule"
       >
      <Properties>
        <BooleanProperty
          Name="Verbose"
          DisplayName="Verbose mode"
          Description="Foo."
          Switch="-v"
        />
        <BooleanProperty
          Name="Unicode"
          DisplayName="Unicode mode"
          Description="Bar."
          Switch="-u"
        />
        <StringProperty
          Name="Location"
          DisplayName="Location"
          Description="Baz."
          Switch="[value]"
          DefaultValue="C:\Bin\Psdk\Bin"
        />
      </Properties>
    </CustomBuildRule>
  </Rules>
</VisualStudioToolFile>

汉斯·帕桑几乎说对了。不幸的是,$InputPath和$InputName没有在VS2010中定义。而是创建您的消息文件:

右键单击项目->添加->新建项目 选择Text File.txt,但将其命名为.mc文件,如messages.mc 创建一个资源文件,比如resources.rc 编辑资源文件,使其仅包含一行: include messages.rc

该文件将由消息编译器生成。现在添加自定义生成步骤以运行消息编译器:

右键单击messages.mc并选择属性。 在“属性”对话框中,将“配置”设置为“所有配置”。 在“配置属性”下,单击“常规”。 确保“从生成中排除”属性设置为“否”。 从下拉菜单中将“项目类型”属性设置为“自定义生成工具”,然后单击“应用”按钮,以便显示“自定义生成工具”属性。 单击“自定义生成工具”属性下的“常规”。 将命令行属性设置为:

mc%完整路径

将Description属性设置为类似于编译消息的内容

将“输出”属性设置为: %Filename.rc;%文件名.h;MSG0409.bin MSG00409.bin文件来自messages.mc中的以下行:

LanguageNames=English=0x409:MSG00409

添加到messages.mc的每种语言都可以有一个bin文件。在输出中列出它们的好处在于,在清理项目时,它们将被删除

我唯一不确定的是设置Execute Before属性以保证messages.rc在resource.rc编译之前生成。我不必设置它,但是如果您发现资源编译器试图在消息编译器之前执行,则必须设置此属性。messages.mc文件已禁用该选项,但可以在项目的自定义生成步骤属性中设置该选项。

如果不需要自定义编译器,则需要了解如何从MSBuild生成.rc文件。 提供了与MSBuild的这种集成

  <ItemGroup>
    <MessageCompile Include="a.mc">
      <GenerateBaselineResource>true</GenerateBaselineResource>
      <BaselineResourcePath>c:\test\</BaselineResourcePath>
    </MessageCompile>
  </ItemGroup>

在Visual Studio 2017中,您可以执行以下操作:

打开项目的.vcxproj文件,然后在ItemDefinitionGroup中添加以下行:

<CustomBuildStep>
  <Command>mc "$(InputDir)\$(InputName).mc" -r "$(InputDir)\res" -h "$(InputDir)"</Command>
</CustomBuildStep>

这将在指定的构建文件夹中生成3个文件.h、.rc和.res-look,但您的意思是:命令行=mc$InputName.mc输出=$InputName.rc$不管怎么说,这都会导致错误:mc:error:0x2试图打开文件。好的,我开始认为存在更大的问题。我创建了一个TextFile.txt,然后配置为:命令行=echo-InputDir=$InputDir-InputName=$InputName>TextOut.txt-Outputs=TextOut.txt不包含$xxx宏扩展。看起来不对。不确定你在做什么。请确保文件扩展名为.mc,而不是.txt谢谢您的帮助。宏名称$InputName,$InputPath在自定义生成步骤中为空。mc.exe失败,未声明任何参数。在上面的回显测试中,我尝试将宏扩展回显到一个文件中,但在那里也是空白的。这可能是一个错误吗?如果您的项目已经有一个.rc文件,您可以简单地将11 msg0049.bin添加到其中。bin文件的用途是什么?如果在FullPath中有空格,则使用mc%FullPath。其中有一个输入错误,依赖项中应该是msg0049.bin,它缺少一个0。我看到一个项目复制了这个确切的信息,并因此一直在重建所有步骤。您是否也知道如何在Visual Studio 2017中执行此操作?您还可以添加一个预构建事件步骤:只需在命令行中为:mc-a LogMsgs.mc-r写入以下内容。\Res-h。