小编Tho*_*mas的帖子

困惑:在c ++中创建c#类的实例

假设someClass是在C#中使用某种方法定义的类int doSomething(void),为简单起见,提供不带参数的构造函数.然后,在C#中,必须在gc堆上创建实例:

someClass c;                   // legit, but only a null pointer in C#
// c->doSomething()            // would not even compile. 
c = new someClass();           // now it points to an instance of someclass.
int i = c->doSomething();      
Run Code Online (Sandbox Code Playgroud)

现在,如果someClass编译成一些.Net库,你也可以在C++/CLI中使用它:

someClass^ cpp_gcpointer = gcnew someClass();
int i = cpp_gcpointer->doSomething();
Run Code Online (Sandbox Code Playgroud)

那简单!漂亮!这当然假设已经将.Net库的引用添加到项目中并且已经进行了相应的使用声明.

我的理解是,这是前一个C#示例的精确C++/CLI等效(缩写为单行,这不是我感兴趣的点).正确?(对不起,我是这个话题的新手)

但是,在C++中也是如此

someClass cpp_cauto;              // in C++ declaration implies instantiation
int i = cpp_cauto.doSomething(); 
Run Code Online (Sandbox Code Playgroud)

是有效的语法.出于好奇,我今天试了这个.一位同事,看着我的肩膀,愿意打赌它甚至不会编译.他本可以输掉赌注.(这仍然是C#程序集中的类).实际上它产生的结果i与前面例子中的代码相同.

也很漂亮,但是 - 嗯 - 究竟是什么,这里创造了什么?我的第一个猜测是,在我的背后,.Net在gc堆上动态创建一个实例,并且cpp_auto是这个对象的某种包装器,其行为类似于类的实例someClass.但后来我找到了这个页面 …

.net c# c++ stack instantiation

16
推荐指数
1
解决办法
1375
查看次数

使用连续无符号整数列表初始化std :: vector <unsigned int>

我想使用一种特殊的方法来初始化一个std::vector<unsigned int>我在其中作为参考的C++书籍中描述的内容(德国着作"Ulrich Breymann的Der C++ Programmer",如果重要的话).在这本书是关于序列类型的STL的部分,特别是指list,vectordeque.在本节中,他写道,这种序列类型有两个特殊的构造函数,即,如果X引用这样的类型,

X(n, t) // creates a sequence with n copies of t
X(i, j) // creates a sequence from the elements of the interval [i, j)
Run Code Online (Sandbox Code Playgroud)

我希望使用第二个间隔unsigned int,即

std::vector<unsigned int> l(1U, 10U);
Run Code Online (Sandbox Code Playgroud)

获取初始化的列表{1,2,...,9}.然而,我得到的是一个unsigned int值为10 的向量: - | 第二个变体是否存在,如果存在,我该如何强制它被调用?

c++ stl initialization std stdvector

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

是否有可用于某处的IL反汇编图标的描述

我正在玩MS IL反汇编程序,它可以让你查看.Net程序集的内容.类和接口以树形视图显示,使用颜色和图标很好地编码.

猜测大多数图标的含义相当容易,例如一个带有大写字母"I"的蓝色图标是一个界面,一个带有"E"的灰色图标是一个枚举,但有些项目 - 尤其是.你打开一个节点时会看到的那些 - 并不总是那么容易猜到(也许只是我).浅蓝色钻石的含义是什么?可能是一个静态的公共成员,但我对这里的'可能'这个词感到不满.类似地,带有白色矩形的蓝色类符号似乎是泛型,但这又是一个猜测.

是否有正式的完整列表,其中包含解释/描述?

.net assemblies

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

从WPF数据网格中删除行

我有一个WPF DataGrid theDataGrid绑定到DataSet ds包含一个表.我想让用户首先在网格中选择它们然后按一个按钮(位于数据网格之外的某个位置)来删除行.我终于得到了以下几行代码,它们做了我想要的,但我觉得它很难看:

  DataSet ds = new DataSet();
        ...
  // fill ds somehow
        ...
  private void ButtonClickHandler(object Sender, RoutedEventArgs e) 
  {
        List<DataRow> theRows = new List<DataRow>();
        for (int i = 0; i < theDataGrid.SelectedItems.Count; ++i)
        {
            // o is only introduced to be able to inspect it during debugging
            Object o = theDataGrid.SelectedItems[i];
            if (o != CollectionView.NewItemPlaceholder)
            {
                DataRowView r = (DataRowView)o;
                theRows.Add(r.Row);
            }
        }
        foreach(DataRow r in theRows) 
        {                
            int k = ds.Tables["producer"].Rows.IndexOf(r);
            // don't …
Run Code Online (Sandbox Code Playgroud)

c# data-binding wpf datagrid

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

在 64 位系统上使用 odbc32 DLLImport

我正在尝试使用 SQLDatasources 在 64 位 Windows 8 系统上使用 VS Express 2012 (C#) 获取 ODBC 数据源列表,如本线程here中所述,我指的是 Stephan Keller 的回复。

如果选择了目标平台的“首选 32 位”选项,他的代码编译良好并且运行没有任何错误,但如果我使用“anycpu”而不使用“首选 32 位”或“x64”作为目标平台,则会遇到内存访问冲突. 我猜(但不确定)这是因为在这种情况下调用 SQLDataSources 的参数没有正确对齐,对吗?(我可以在进程资源管理器中看到该程序使用 c:\windows\system32\odbc32.dll,它在 64 位 Windows 系统上是 64 位,所以使用的 dll 是,据我所知,正确的)。

假设我的猜测是正确的,我搜索但找不到从 ODBC32.dll 中使用的 SQL 数据类型(如 SQLSmallInt,MS 文档中使用的那些)到 .Net 64 的映射的参考位数据类型。任何指针?

提前致谢,

托马斯

c# 64-bit odbc sqldatatypes

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

将 git commit 移动到新分支

通过 git,我进行了一些更改,现在希望将它们放在一个新分支中。如何实现这一点在几个地方都有解释,例如这里

我的困惑更多地与此任务的本地/远程方面有关。

我首先将 github 上的存储库分叉到 myForkOnGitHubRepo。然后我将该存储库克隆到我的本地 PC:

local: git clone myForkOnGitHubRepo
Run Code Online (Sandbox Code Playgroud)

然后我更改了源,提交并推送:

local: git add .
local: git commit
local: git push # (actually I used the minGW Gui for that one since the command line push issued a warning)
Run Code Online (Sandbox Code Playgroud)

现在我的本地更改在 myForkOnGitHubRepo 中可见。美好的。现在我注意到我更愿意使用一个新分支(并且也在 myForkOnGitHubRepo 的新分支中进行更改)

我可以按照我在开头发布的链接中的说明进行操作吗?

local: git branch newbranch
local: git reset --hard HEAD~1 # only one commit was done
Run Code Online (Sandbox Code Playgroud)

然后——好吧,现在怎么办?我只需要再推一次吗?或者我需要明确地推送新分支吗?(抱歉,如果这是非常基本的,我以前从未使用过它)。

在创建新分支之前我还需要做什么吗?我的理解是,推送后,本地和远程的状态是一样的,对吗?

git version-control github

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

在SoapUI groovy脚本中获取先前测试步骤的名称

我是SoapUI中的groovy脚本新手,对可用信息量有点困惑,所以我可能只是忽略了这个问题的答案.

context.getCurrentStep()脚本中有一个方法可以加载GroovyUtils.但是在脚本步骤中,当然会返回脚本步骤本身的名称.

现在我想要显式地访问上一步的名称(更确切地说是响应)而不使用它的名称.是否有一种简单的方法可以实现这一目标?

groovy automated-tests soapui

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

为什么std :: set <> :: find返回一个const?

可能重复:
C++ STL集更新很繁琐:我无法更改元素

我想使用a std::set<>来计算某个值的出现次数并同时对对象进行排序.为此,我创建了一个类RadiusCounter

class RadiusCounter
{
public:
    RadiusCounter(const ullong& ir) : r(ir) { counter = 1ULL; }
    void inc() { ++counter; }
    ullong get() const { return counter;}
    ullong getR() const { return r;}
    virtual ~RadiusCounter();
protected:
private:
    ullong r;
    ullong counter;
};
Run Code Online (Sandbox Code Playgroud)

(析构函数不做任何操作)和比较运算符:

const inline bool operator==(const RadiusCounter& a, const RadiusCounter& b) {return  a.getR() == b.getR();}
const inline bool operator< (const RadiusCounter& a, const RadiusCounter& b) {return a.getR() < b.getR();}
const inline bool operator> (const …
Run Code Online (Sandbox Code Playgroud)

c++ stl const set

0
推荐指数
1
解决办法
3087
查看次数

WPF 中用于枚举 System.IO.Ports.Parity 的 ComboBox

我想(在 C# 中)用枚举的可接受值填充组合框的可接受值列表System.IO.Ports.Parity。为此,我创建了一个集合:

public class theParitySource : ObservableCollection<Parity>
{
    public theParitySource()
    {            
        Array parities = System.Enum.GetValues( typeof( Parity ) );
        foreach (Parity p in parities) this.Add(p);            
    }
}
Run Code Online (Sandbox Code Playgroud)

(顺便说一句:这个初始化有单行吗?)并将其作为组合框的数据上下文:

  ...
  xmlns:local="clr-namespace:myNamespace"
  ...

  <ComboBox ...>
      <ComboBox.DataContext>
          <local:theParitySource />
      </ComboBox.DataContext>
  </ComboBox>
Run Code Online (Sandbox Code Playgroud)

然而,组合框仍然是空的(它显示为空,但似乎具有正确的长度),即使我可以在调试器中看到如何theParitySource填充。这种方法确实适用于另一个组合框(即使在同一个类中),我为波特率执行此操作。我用整数值初始化,所以我想这与我在这里使用枚举的事实有某种关系,但我不知道可能是什么原因。任何指针?我需要写一个转换器吗?

(当然我可以通过从枚举创建一个字符串列表来解决这个问题,但这会有点不愉快......)

编辑:实际上我更喜欢在 XAML 中完成所有这些。有没有一种简单的方法可以做到这一点?

.net c# wpf combobox

0
推荐指数
1
解决办法
1929
查看次数

正则表达式导致多样性

给定正则表达式"\d",它将匹配"a123b456"中的每个数字(即1,2,3,4,5,6).

给定正则表达式"\d\d"和相同的测试字符串,似乎只匹配"12"和"45" - 这至少是http://regexpal.com/所说的,类似于我使用C++教科书创建的正则表达式评估器(其中使用boost/regex).

为什么第二个匹配"23"和"56",或者,如果该行为是正确的,为什么第一个匹配每个数字?

regex

0
推荐指数
1
解决办法
769
查看次数