我正在使用特定于任务的.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)
所以任何人都有了主意?谢谢您的帮助!
问候内姆
正如标题所说:是否有使用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)
我知道我可以在项目设置中设置包含目录,但我要求预处理器指令,因为否则我必须为每个编译器配置文件设置它.
问候内姆
当在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) 在.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,我不知道在哪里找到它.关于如何解决这个问题的任何想法?
我在哪里可以通过WinApi找到消息框的标准系统图标?我想创建一个高级对话框(带有详细信息扩展名)作为WinApi资源,但我想使用系统默认图标,如:

对于.NET我知道我会找到它们System.Drawing.SystemIcons,但是我在哪里可以找到它们使用原生C和WinApi?我怎么能应用它们?
可能重复:
在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) 我不经常使用winapi,我写的几乎是.NET代码.但此时我必须使用winapi进行简单的对话.我想处理一些关键事件.因此我观察了相应的回调消息WM_KEYDOWN或WM_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似乎发生了一条消息.
问候内姆.
如何将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 而不需要强制转换.(因为对于真正的程序集,我无法更改代码,也不想包装它.这会增加主要的复杂性.)
System.IntPtr向后传输,向前传输VT_INTmapps System.Int32.VT_I8mapps System.Int64但不是System.IntPtr. …在不同平台上渲染矢量图形时,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) 我有一个软件可以使用多个数据记录的模式生成输出.此文件是在特定时间间隔内生成的,由于软件已关闭,我无法更改它.
我的模式类似于(没有尾随的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并在之后包含修改后的文件,这是非常费力的.
c++ ×6
.net ×4
c# ×4
generics ×2
include ×2
winapi ×2
xaml ×2
c ×1
callback ×1
clr ×1
clr-hosting ×1
com ×1
dialog ×1
icons ×1
keyboard ×1
marshalling ×1
messagebox ×1
methods ×1
native ×1
nested ×1
output ×1
php ×1
pragma ×1
prediction ×1
reference ×1
svg ×1
uwp ×1
variant ×1
windows-8 ×1
winforms ×1