小编Flo*_*ers的帖子

使用Word.Interop创建多级项目符号列表

我需要创建一个多级子弹列表Microsoft.Office.Interop.Word,我目前正在努力解决其(可怕的)API(再次).

我刚刚用编程语言C#在Microsoft Office Word 2010的VSTO文档级项目中创建了以下示例(不是动态的,仅用于演示目的):

Word.Paragraph paragraph = null;
Word.Range range = this.Content;
paragraph = range.Paragraphs.Add();
paragraph.Range.Text = "Item 1";
paragraph.Range.ListFormat.ApplyBulletDefault(Word.WdDefaultListBehavior.wdWord10ListBehavior);
// ATTENTION: We have to outdent the paragraph AFTER its list format has been set, otherwise this has no effect.
// Without this, the the indent of "Item 2" differs from the indent of "Item 1".
paragraph.Outdent();

paragraph.Range.InsertParagraphAfter();

paragraph = range.Paragraphs.Add();
paragraph.Range.Text = "Item 1.1";
// ATTENTION: We have to indent the paragraph AFTER its text has …
Run Code Online (Sandbox Code Playgroud)

c# vsto ms-word ms-office

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

CMake程序包配置文件中的一般“传递行为”(find_dependency)

目前,我正在尝试增强我的CMake配置约定框架。我的每个C ++组件(即CMake项目)都是通过该框架构建的,并且该框架已经能够使用以下命令创建CMake 软件包配置文件configure_package_config_file()

PackageConfig.cmake.in框架使用以下(最小)模板文件(v1)。

@PACKAGE_INIT@

include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake")
check_required_components("@PROJECT_NAME@")
Run Code Online (Sandbox Code Playgroud)

如果一个组件一切工作正常美孚建造和安装这种做法被其它组件find_package(<package> CONFIG)命令(只要正确的目录路径指向的安装CMake的程序包配置文件美孚通过CLI设置)。

但是(当然)如果A本身具有一个或多个依赖项,则会出现问题。使用当前的方法,B必须拥有A本身的find_package()每个依赖关系 。这意味着当前不将传递依赖项报告给需要依赖项的组件。显然,这不是我想要实现的。

经过一番谷歌搜索后,我了解了该find_dependency()命令,该命令是为解决上述问题而创建的:

它旨在用于程序包配置文件(<package>Config.cmake)。find_dependency转发正确的参数, QUIET并将REQUIRED其传递给原始find_package()调用。指定的所有其他参数将转发给find_package()

到目前为止一切顺利,但请等待...我必须再次显式设置每个依赖项名称及其版本?我已经在声明CMakeLists.txt!中的依赖项时做到了这一点。如何使用该方法创建可重复使用的通用程序包配置文件?除了在中明确列出所有依赖项(及其版本)CMakeLists.txt并将该列表传递给之外,我目前无法确定该问题的任何解决方案PackageConfig.cmake.in

示例:未经测试PackageConfig.cmake.in(v2):

@PACKAGE_INIT@

include(CMakeFindDependencyMacro)

# TODO(wolters): How-to implement this with a generic approach? Would the
# following work? Does a better solution do …
Run Code Online (Sandbox Code Playgroud)

c++ build cmake dependency-management package-management

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

CMake与Visual Studio 2017 C ++核心准则检查器(CppCoreCheck)的集成

我目前尝试使用生成器将Visual Studio 2017 的C ++核心准则检查器(CppCoreCheck)与元生成系统CMake集成在一起Visual Studio 15 2017 Win64

以下示例说明了我的方法(我尝试将CMake源代码精简到最小)。

首先,我将所有编译器开关添加到了构建目标,以使用CppCoreCheck进行分析:

cmake_minimum_required(VERSION 3.12)

project(cppcorecheck-example)

find_package(Boost REQUIRED MODULE)

add_executable(app main.cpp)
target_link_libraries(app PRIVATE Boost::boost)
target_compile_options(app
    PRIVATE
    "/analyze"
    "/analyze:WX-"
    "/analyze:log" "cppcorecheck.xml"
    "/analyze:stacksize" 16384
    "/analyze:max_paths" 256
    "/analyze:ruleset" "CppCoreCheckRules.ruleset"
    "/analyze:plugin EspXEngine.dll"
    )
Run Code Online (Sandbox Code Playgroud)

我正在使用以下内容main.cpp

#include <boost/system/error_code.hpp>

int main() {
  int arr[10];   // warning C26494
  int* p = arr;  // warning C26485

  {
    int* q = p + 1;  // warning C26481
    p = q++;         // warning C26481
  } …
Run Code Online (Sandbox Code Playgroud)

c++ cmake visual-studio static-code-analysis cpp-core-guidelines

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

带有使用多个值的生成器表达式的 CMake set_property 命令

我将 CMake v3.13.4 与Visual Studio 2017 Win64生成器一起使用,我需要修改 Visual Studio Librarian(对于 CMake 对象库)的命令行选项。

\n\n

为了实现这一点,CMake 提供了可以通过and命令STATIC_LIBRARY_OPTIONS设置的目标属性。set_propertyset_target_properties

\n\n

文档指出STATIC_LIBRARY_OPTIONS支持生成器表达式:

\n\n
\n

的内容STATIC_LIBRARY_OPTIONS可以使用 \xe2\x80\x9c 生成器表达式\xe2\x80\x9d 和\n 语法$<...>。有关可用表达式,请参阅cmake-generator-expressions(7) \n 手册。有关定义构建系统属性的更多信息,请参阅cmake-buildsystem(7) \n 手册。

\n
\n\n

但是:无论我尝试什么,这些值都没有正确转义\xc2\xb4,例如

\n\n
set_property(TARGET object_library PROPERTY STATIC_LIBRARY_OPTIONS $<$<CONFIG:Release>:/WX /NOLOGO /LTCG /ERRORREPORT:NONE>)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 Visual Studio 中会导致以下结果:

\n\n
All Options: `/OUT:"..." /LTCG /MACHINE:X64 /NOLOGO \nAdditional Options: %(AdditionalOptions) /machine:x64 ""$"<1:/WX" "/ERRORREPORT:NONE>"\n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试了以下方法,但似乎都失败了。

\n\n
set_property(TARGET object_library PROPERTY\n  STATIC_LIBRARY_OPTIONS …
Run Code Online (Sandbox Code Playgroud)

build cmake visual-studio cmake-language

4
推荐指数
1
解决办法
4526
查看次数

标准库函数将提供operator <<的对象转换为std :: string

我刚刚注意到我在我的C++ 11应用程序中使用了以下代码(它运行得很安静):

template <typename T>
std::string output_streamable_to_string(T const& kObject) {
  std::ostringstream os;
  os << kObject;

  return os.str();
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:标准库(std)中是否存在提供此功能的函数?

我知道std::to_string存在,但只适用于标准库数据类型.我想将a转换boost::asio::ip::udp::endpoint为a std::string.既然boost::asio::ip::udp::endpoint只提供了一个operator<<函数,我需要将其转换std::ostream为a std::string.

c++ iostream stdstring ostream c++11

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