小编Chr*_*ner的帖子

如何为类型参数约束的泛型类型编写扩展方法?

我正在使用特定于任务的.NET平台,它是预编译的而不是OpenSource.对于某些任务,我需要扩展此类,但不是通过继承它.我只是想添加一个方法.

首先,我想向您展示一个虚拟代码现有类:

public class Matrix<T> where T : new() {
    ...
    public T values[,];
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想以下面的方式扩展这个类:

public static class MatrixExtension {
    public static T getCalcResult<T>(this Matrix<T> mat) {
        T result = 0;
        ...
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

我从许多谷歌链接获得这种语法,所以不知道它是否正确.编译器告诉我没有错误,但最终它不起作用.最后,我想以下列方式调用此函数:

Matrix<int> m = new Matrix<int>();
...
int aNumber = m.getCalcResult();
Run Code Online (Sandbox Code Playgroud)

所以任何人都有了主意?谢谢您的帮助!

问候内姆

.net c# generics methods

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

是否有包含目录的pragma指令?

正如标题所说:是否有使用VS20**C++的包含目录的pragma指令?我想的是:

#pragma comment(include, "..\externals\blah\includes\")
Run Code Online (Sandbox Code Playgroud)

这样我就可以在这种风格中使用include,而blah.h也可以使用这种风格吗?

#include <blah.h>
Run Code Online (Sandbox Code Playgroud)

我知道我可以在项目设置中设置包含目录,但我要求预处理器指令,因为否则我必须为每个编译器配置文件设置它.

问候内姆

c++ pragma include visual-studio

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

如何在Windows应用商店应用中显示大量文本?

当在WinRT中RichTextBlock甚至在TextBlockWinRT中显示大量文本时,我注意到WinRT XAML渲染引擎达到了极限.因此,请考虑以下简单示例,其中我已经RichTextBlock在XAML中定义了一个,并且我在后面的代码中填充了大量文本.(这对于简单来说也类似TextBlock.)

这是XAML部分:

<ScrollViewer>
    <RichTextBlock Name="rtb" />
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

并填写了一些代码:

void MainPage_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
    string text = Enumerable.Range(0, 200).Aggregate("", (current, i) => current + loremipsum);
    text = text.Replace("\r\n", "\n").Replace("\r", "\n");
    foreach (var line in text.Split('\n'))
    {
        var paragraph = new Paragraph();
        paragraph.Inlines.Add(new Run { Text = line });
        this.rtb.Blocks.Add(paragraph);
    }
}

private const string loremipsum = @"
    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt …
Run Code Online (Sandbox Code Playgroud)

c# xaml windows-8 windows-runtime

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

如何在托管CLR的本机c ++应用程序中创建通用.NET类型(不使用C++/CLI)?

在.NET程序中,我可以通过以下方式创建泛型类型:

 System::Type::MakeGenericType(...)
Run Code Online (Sandbox Code Playgroud)

必须有一种方法可以在本机C++中为.NET类型(带_TypePtr)做到这一点.我正在托管我自己的CLR实例而不使用C++/CLI.(这是一个如何做到这一点的例子.)我的方法是:

_TypePtr BuildGenericType(_TypePtr spGenericType, _TypePtr spTypeArgs[]) 
{
    return spGenericType-> ..... ???
}
Run Code Online (Sandbox Code Playgroud)

但是没有类似的方法MakeGenericType,我不知道在哪里找到它.关于如何解决这个问题的任何想法?

.net c++ generics native

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

我在哪里可以通过WinApi找到消息框的标准系统图标?

我在哪里可以通过WinApi找到消息框的标准系统图标?我想创建一个高级对话框(带有详细信息扩展名)作为WinApi资源,但我想使用系统默认图标,如:

标准系统图标

对于.NET我知道我会找到它们System.Drawing.SystemIcons,但是我在哪里可以找到它们使用原生C和WinApi?我怎么能应用它们?

c winapi icons dialog messagebox

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

有没有办法在C++中预先声明嵌套类?

可能重复:
在C++中转发嵌套类型/类的声明

对于类的简单交叉引用,可以预先声明类名并将其用作引用.以这种方式,表示是指针.但是如果我想交叉引用两者的嵌套类(请看下面的例子),我会遇到麻烦,因为似乎无法预先声明嵌套类.

所以我的问题是:有没有办法预先解析嵌套类,以便我的例子可以工作?

如果没有:是否有一个共同的解决方法,那不会过多地丑化代码吗?

// Need to predeclare it to use it inside 'First'
class Second;
class Second::Nested; // Wrong

// Definition for my 'First' class
class First
{
public:
    Second::Nested* sested; // I need to use the nested class of the 'Second' class.
                            // Therefore I need to predeclare the nested class.
    class Nested { };
};

// Definition for my 'Second' class
class Second
{
public:
    First::Nested* fested; // I need to use the nested class of …
Run Code Online (Sandbox Code Playgroud)

c++ nested reference prediction

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

如何在winapi标准对话框中处理键盘事件?

我不经常使用winapi,我写的几乎是.NET代码.但此时我必须使用winapi进行简单的对话.我想处理一些关键事件.因此我观察了相应的回调消息WM_KEYDOWNWM_KEYUP在MSDN上并将其添加到我的回调函数中.

INT_PTR CALLBACK cbfunc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
  switch(message) {
    // ...

    case WM_KEYUP:
        MMsgBox("up"); // I never get here
        return 0;

    case WM_KEYDOWN:
        MMsgBox("down"); // I never get here        
        return 0;

    // ...
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但既WM_KEYUP不会WM_KEYDOWN触发也不会触发.然后我说找到解决这个问题的方法.我想我的对话可能会吃掉这些消息.所以我补充说:

    case WM_GETDLGCODE: 
        return DLGC_WANTALLKEYS;
Run Code Online (Sandbox Code Playgroud)

结果它没有帮助.我发现的其他解决方案如下:

  • 或者使用WM_GETDLGCODE事件来处理此键,如此处所示.
  • 我发现很多线程(比如这个)谈论一个叫做的方法PreTranslateMessage.但我甚至没有这个课,因为我只是通过使用创建我的对话框DialogBoxParam

所以他们都没有为我工作.在那一刻我不知道如何处理它.我注意到的是,在按键时,WM_COMMAND似乎发生了一条消息.

问候内姆.

c++ keyboard winapi callback winforms

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

C#和非托管本机C++是否有通用的方法来确定已安装的CLR版本?

正如标题所说:C#中是否有一种通用的方式,特别是非托管的本机C++来确定已安装的CLR版本?这意味着不仅要检查是否根据此知识库文章安装了Framework .我想通过使用CLR接口来完成它,就像这里为CLR1,CLR1.1和CLR2 所做的那样.通过这种方式,我可以确保它们真正安装.但这不适用于CLR4.有任何想法吗?

我的目标是创建一个可用的CLR版本的枚举,如Clrver(无论进程列表功能是否正确).

.net c# c++ clr clr-hosting

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

如何将void*放入COM VARIANT,以便通过COM-Interop将其作为IntPtr编组到.NET?

如何将void指针(aka.void*或handle)放入COM VARIANT-Type.包装类_variant_t将它错误地转换为布尔值.但是我需要将它作为指针放入,以便.NET的COM-Marshaller将其识别为IntPtr.

我读过的其中一个主题就是MSDN Social上的这个主题.他们提出了这样的解决方案:

VARIANTARG Arg; 
VariantInit(&Arg);
V_VT(&Arg) = VT_INT;
V_INT(&Arg) = (int)m_hWnd; 
Run Code Online (Sandbox Code Playgroud)

这个解决方案的问题是,V_INT(成员intVal)是一个32位整数,并强制指针为32位指针.换句话说:我无法传输64位指针.这个问题有什么解决方案吗?任何其他方式把它作为64位整数转移?

我已经通过一些代码对此进行了测试.因此,我使用.NET方法接收任何System.Object并输出其值和类型.

public static void TakePtr(object ptr)
{
    Console.WriteLine("Received a " + ptr.GetType() + " with value " + ptr);
}
Run Code Online (Sandbox Code Playgroud)

VARIANT的兼容性已经填满,v.llVal = 0; v.byref = myPointer;所以它应该总是正确地编译32/64位指针.此外,我需要设置变体类型,以便.NET mapps它System.IntPtr 而不需要强制转换.(因为对于真正的程序集,我无法更改代码,也不想包装它.这会增加主要的复杂性.)

  • .NET System.IntPtr向后传输,向前传输VT_INTmapps System.Int32.
  • VT_I8mapps System.Int64但不是System.IntPtr. …

.net c++ com marshalling variant

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

有没有办法在后面的代码中解析UWP中的矢量路径几何?

在不同平台上渲染矢量图形时,SVG和SVG路径格式非常有效.但目前我在通用Windows平台上实现这一目标的挑战.我有一个给定的路径(取自SVG文件),例如:

M 198.09375 723.80859 C 177.18295 774.80866 156.88493 827.84014 140.58594 884.89844 L 140.72461 885.21875 L 142.49609 885.21875 C 161.1353 855.01082 143.6824 808.69757 193.58008 822.50977 C 220.7388 819.58475 192.23555 868.86205 206.17383 873.92578 C 203.13499 858.15989 212.17478 843.34361 213.20312 827.64648 C 216.4534 822.98862 226.9422 827.32963 232.86719 826.05078 C 239.35348 827.82466 259.48464 823.52777 253.90234 835.38867 C 252.16143 848.23286 247.39181 868.36181 258.57812 876.86133 C 275.17557 871.67116 293.30624 867.51489 306.24805 855.00195 C 309.22224 855.27087 320.1309 878.89646 334.30078 869.88281 C 342.81953 864.33463 353.03187 845.67608 358.37891 844.69922 …
Run Code Online (Sandbox Code Playgroud)

c# xaml svg vector-graphics uwp

3
推荐指数
2
解决办法
2294
查看次数

如何防止包含文件在PHP中生成输出?

我有一个软件可以使用多个数据记录的模式生成输出.此文件是在特定时间间隔内生成的,由于软件已关闭,我无法更改它.

我的模式类似于(没有尾随的CR或LF):

<? $elem[]='%putValueOfRecordHere%' ?>
Run Code Online (Sandbox Code Playgroud)

输出将是:

<? $elem[]='1' ?>    
<? $elem[]='2' ?>    
<? $elem[]='3' ?>
Run Code Online (Sandbox Code Playgroud)

事实上,该软件为每条记录添加了一个CRLF,包括并使用这个文件会为我的实际输出添加大量的CRLF.

我只想知道,当包含PHP文件时,是否有内置方法,删除这些空行.否则我将不得不解析此文件,删除所有CRLF,保存它而不使用CRLF并在之后包含修改后的文件,这是非常费力的.

php include output

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