小编Ðаn*_*Ðаn的帖子

ToolStripSplitButton与ToolStripDropDownButton

ToolStripSplitButtonToolStripDropDownButton有什么区别?(Visual Studio 2008)(此处也询问,而不是SO).乍一看,它们看起来大致相同; 特别是在设计师.

visual-studio .net-2.0 winforms

9
推荐指数
2
解决办法
9717
查看次数

我们如何在 c++/cli 项目中使用托管 nuget 包

我想在 c++/cli 项目中使用托管 nuget 包。有没有办法做到这一点?

比如我的场景差不多是这样的:

我创建了一个 C# 项目(MainProject)并将 EntityFramework nuget 包添加到该项目中。

我又创建了一个 C# 项目(TestCSProject),并添加了 MainProject 作为对该项目的引用。然后自动在引用entityframework中也添加

我创建了一个 C++/CLI 项目(TestCLIProject),并添加了 MainProject 作为对该项目的引用,以便我想看看是否可以使用实体框架。

但那并没有发生。

所以我想知道如何在 c++/cli 项目中使用托管 nuget 包

c# c++ c++-cli

9
推荐指数
2
解决办法
4428
查看次数

使用C++/CLI进行100%托管开发有什么好处?

使用C++/CLI 进行100%托管开发有哪些优点(可能存在的缺点列表)(即使用/ clr:safe编译,"生成...程序集,就像用C#编写的那样") )?尤其是当compard到C#(注意:C++/CLI:在C#中的优势它有什么优势超过任何标准C++或C#中使用C++/CLI?大多是有关管理/非托管互操作).

例如,这里有几个我的头顶:

  • C++ - 托管类型的样式引用,不像完整的非可空引用那样优雅,但总比没有好或使用解决方法.

  • 模板比泛型更强大

  • 预处理器(这可能是一个缺点!,但宏可用于代码生成)

  • 引用类型的堆栈语义 - 自动调用IDisposable :: Dispose()

  • 通过C++析构函数更容易实现Dispose()

C#3.0添加了自动实现的属性,因此不再具有C++/CLI优势.

.net c# c++-cli

8
推荐指数
3
解决办法
1460
查看次数

System.String如何正确包装以防止不区分大小写?

这个问题不是关于管理Windows路径名; 我仅将其用作不区分大小写的字符串的特定示例.(如果我现在改变这个例子,那么一大堆评论将毫无意义.)


这可能类似于可能创建不区分大小写的字符串类?,但那里没有很多讨论.此外,我并不真正关心所string享有的紧密语言集成或性能优化System.String.

比方说,我用了很多这些(正常)不区分大小写Windows路径名的(我不是真正关心的实际像路径的很多细节\/,\\\\是一样的\,file://网址..等).一个简单的包装器可能是:

sealed class WindowsPathname : IEquatable<WindowsPathname> /* TODO: more interfaces from System.String */
{
    public WindowsPathname(string path)
    {
        if (path == null) throw new ArgumentNullException(nameof(path));
        Value = path;
    }

    public string Value { get; }

    public override int GetHashCode()
    {
        return Value.ToUpperInvariant().GetHashCode();
    }

    public override string ToString()
    {
        return Value.ToString();
    }

    public override bool Equals(object obj)
    { …
Run Code Online (Sandbox Code Playgroud)

.net c# string

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

暴露自定义STL样式迭代的首选方法是什么?

(另请参阅是否有一种很好的方法可以在C++中为自定义类型手写所有12个所需的Container函数?)


对于像这样的课程

namespace JDanielSmith {
class C
{
    const size_t _size;
    const std::unique_ptr<int[]> _data;

public:
    C(size_t size) : _size(size), _data(new int[size]) {}

    inline const int* get() const noexcept { return _data.get(); }
    inline int* get() noexcept { return _data.get(); }

    size_t size() const noexcept { return _size; }
};
}
Run Code Online (Sandbox Code Playgroud)

暴露迭代的首选方式是什么?我应该写begin()/ end()(和cbegin()/ cend())成员函数吗?

const int* cbegin() const {
    return get();
}
const int* cend() const {
    return cbegin() + size();
}
Run Code Online (Sandbox Code Playgroud)

或者这些应该是非会员职能? …

c++ iterator stl

8
推荐指数
2
解决办法
687
查看次数

如何将多个函数重载作为单个参数传递?

这是试图摆脱宏的另一种情况.考虑

void f_(int i) { printf("f_(int)\t%d\n", i); }
void f_(int i, double x) { printf("f_(int, double)\t%d, %5.3f\n", i, x); }
void g_(int i) { printf("g_(int)\t%d\n", i); }
void g_(int i, double x) { printf("g_(int, double)\t%d, %5.3f\n", i, x); }
Run Code Online (Sandbox Code Playgroud)

(想象一下f_().foo文件中获取数据或使用硬编码的"虚拟"值,g_().bar执行相同操作.)可能有一个函数来决定调用哪个重载:

void f(int i, double d) { (i > 0) ? f_(i, d) : f_(i); }
Run Code Online (Sandbox Code Playgroud)

具有相同的逻辑重复g_():

void g(int i, double x) { (i > 0) ? g_(i, x) : g_(i); …
Run Code Online (Sandbox Code Playgroud)

c++ macros templates

8
推荐指数
2
解决办法
199
查看次数

确定何时加载.NET(非托管)C++

[这是TLDR ...对不起...]

我在一个包含数百个DLL的巨大(大部分)C++/MFC应用程序上工作; 它通过COM支持动态加载的"添加"机制,因此可以使用COM互操作在.NET中开发加载项.一些有限的新功能是在.NET中使用这种"插件"机制开发的(尽管仍然是动态加载的); 但是,最终用户可以决定不使用此功能.因此,.NET可能无法在启动时加载.

但是,.NET时加载,我需要做一些特定的.NET initialzation(特别设置的CurrentUICulture匹配本地/非托管UI).

一种解决方案就是在代码到处加载新的.NET功能或COM加载项时简单地进行.N​​ET初始化.鉴于此应用程序的性质,它可能是一个95 +%的解决方案(大多数用户将使用新功能).

但这不是万无一失的.有人可以通过构建带有/ clr标志的模块随时"随时"添加新的.NET功能(请记住,这是一个巨大的应用程序).

一个更强大(和明显)的解决方案是简单地导致.NET在启动时通过C++/CLI加载.但是,每个字节和时钟周期都很重要的一些顽固的C++开发人员并不想这样做; 有点可以理解,因为除非/直到加载.NET,否则不需要设置CurrentUICulture.

我想到的另一种可能性是挂钩LoadLibrary并寻找mscorlib.现在我知道.NET即将被加载由于某种原因,以正常方式加载它并在其他代码执行任何操作之前进行初始化.但是挂钩LoadLibrary(或其他任何事情)真的不是我想做的事情.

那么,是否有一种简单(更好)/更好的方式来判断是否要加载.NET?

编辑: Reed对LockClrVersion的回答非常接近.唯一的打嗝是,如果您在混合模式DLL /程序集中链接它将无法工作.

// ClrAboutToLoad.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <MSCorEE.h>

// http://community.bartdesmet.net/blogs/bart/archive/2005/07/22/2882.aspx
FLockClrVersionCallback begin_init, end_init;
STDAPI hostCallback()
{
    printf("hostCallback()\n");

    // we're in control; notify the shim to grant us the exclusive initialization right
    begin_init();

    ICLRRuntimeHost *pHost = NULL;
    HRESULT hr …
Run Code Online (Sandbox Code Playgroud)

.net c++

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

表明IEnumerable是"慢"还是"快"的好方法是什么?

这个问题的答案是什么了IEnumerable预期的性能?说没有办法知道迭代任意IEnumerable的性能.每次迭代都可以访问数据库或进行Web服务调用; 或者它可能只返回数组/列表中的下一个项目.

鉴于此,是否有一种很好的方式来表明"这很快"?例如,用T[]List<T>代替IEnumerable<T>我知道从哪里T[i]开始T[i+1]会很快.(当然,强制枚举返回列表/数组可能会产生其他性能问题. List<T>还会暴露可编辑的语义.)

相反,返回IQueryable<T>而不是IEnumerable<T>一个表明"这很慢"的好方法?或许IEnumerable<Task<T>>

客户C无法知道IEnumerable<T>s将具有截然不同的性能特征.

class C
{
   readonly T[] m_data;
   public IEnumerable<T> ThisWillIterateQuickly { get { return m_data; } }

   public IEnumeralbe<T> ThisWillIterateSlowly
   {
      get
      {
         T retval = ... an expensive database call ...;
         yield return retval;
      }
   }

   public IQueryable<T> IsThisBetterForSlow { get { return ThisWillIterateSlowly; } }
   public T[] IsThisAGoodWayForFast { get …
Run Code Online (Sandbox Code Playgroud)

.net performance ienumerable iqueryable

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

c++:通过花括号调用构造函数?

class A 
{
    int value_;
    public:
    A(int value):value_(value){}
};

A get_a1(int value)
{
    return A(value);
}

A get_a2(int value)
{
    return {value};
}


int main()
{
    A a1 = get_a1(1);
    A a2 = get_a2(2);
}
Run Code Online (Sandbox Code Playgroud)

get_a1()和之间有什么区别get_a2()(如果有的话)?

怎么return {value};称呼?(我猜“通过大括号调用构造函数”不是引用此内容的正确方法)

c++ constructor scope return

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

C++/CLI:为什么我不能通过引用传递字符串?

为什么Microsoft的C++/CLI不允许我通过引用传递字符串?我收到以下错误:

C3699:'&':不能在类型'System :: String'上使用此间接

string managed-c++ c++-cli reference

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