小编A9S*_*9S6的帖子

.NET - 一种将我自己的剪贴板格式添加到现有格式的方法

我有一个Excel插件,在工作表上显示一些结构.用户可以复制结构并将其粘贴到另一个工作表或由剪贴板格式处理的其他应用程序中.当用户复制结构时,我将结构转换为特定格式,并使用DataObject :: SetData()将其放在剪贴板上.请注意,在Excel中启动副本时,它会在剪贴板上放置多种格式(请参见图像).

问题是有一个第三方应用程序依赖于剪贴板上的数据(从Excel复制并粘贴到这个第三方应用程序)但有趣的是,我不确定它依赖于哪种格式.我需要保留Excel在那里放置的现有格式,并添加我自己的格式.

目前,当我在.NET中使用Clipboard类(使用DataObject并在其中调用SetData)时,所有其他格式都被新的格式替换.然后我尝试创建一个新的DataObject,将现有的格式数据复制到此数据对象,然后在剪贴板中设置此数据对象.这很好,但复制数据需要时间.

 // Copying existing data in clipboard to our new DataObject
 IDataObject existingDataObject = Clipboard.GetDataObject();
 DataObject dataObject = new DataObject();

 string[] existingFormats = existingDataObject.GetFormats();
 foreach (string existingFormat in existingFormats)
        dataObject.SetData(existingFormat, existingDataObject.GetData(existingFormat));
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种解决方案,只需访问现有的DataObject,并悄悄地将自己的数据添加到它,而不会影响其他格式.

Excel剪贴板格式 - (忽略本机格式)

剪贴板格式http://www.freeimagehosting.net/uploads/258a7fcdd8.jpg

.net excel clipboard

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

为什么Visual C++版本号中包含逗号而不是点

我已经看到我的Visual C++项目具有以下声明,这些声明使用COMMAS而不是DOTS用于版本:

#define FILEVER        11,0,2,0
#define PRODUCTVER     11,0,2,0
#define STRFILEVER     "11, 0, 2, 0\0"
#define STRPRODUCTVER  "11, 0, 2, 0\0"
Run Code Online (Sandbox Code Playgroud)

这里的MS文章也有逗号相同的值(实际上上述声明基于该文章).我们为什么在这里使用COMMAS?当我打开编译的文件属性时,我看到FileVersion为11.0.2.0但是ProductVersion为11,0,2,0 - 我的QA朋友说它是一个bug :).我缺少一些标准或者一些内部机制吗?

versioning version-numbering visual-c++

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

使用"不同语言"源代码

如果给你一个大的n层项目(.NET),其中15,000行代码用"西班牙语"(变量,表格,类名等)编写,需要添加功能和修复错误,那么你的策略是什么呢? ?

  1. 将整个项目转换为英语(谷歌翻译或其他工具)名称似乎不是一个好的选择,因为它将是耗时的
  2. 聘请了解"西班牙语"或翻译的开发人员

编辑:编写原始软件的开发人员不懂英语,所以在这种情况下他们没用.

project-management

4
推荐指数
2
解决办法
269
查看次数

自动应用生成器

是否可以编写一个可以每天输出数百个应用程序的自动应用程序生成器?应用程序只是一系列二进制值.如果超级计算机每天生成数百万个组合并输出生成的具有不同大小的二进制文件.然后,这些二进制文件将"运行"以查看它们是否实际运行,如果它们确实运行,则会将这些二进制文件发送给某些测试人员以检查"生成的内容".

谁知道,我们可能会开始获得100%无错误的解决方案.

code-generation generator

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

如何在Git存储库中的[/ Libs/x64/Release]文件夹中包含lib文件

我有一个Git存储库,在根目录中包含一个Libs目录.此目录包含我想要包含在存储库中并推送到主仓库的所有已编译的.lib文件.Libs目录的结构是:

自由人
......-- | x64
........-- | 发布
........-- | 调试

问题是我无法使Git包含Release和Debug文件夹中的LIB文件.我认为它是因为gitignore排除了Release和Debug文件夹:

# Build results
[Dd]ebug/
[Rr]elease/
x64/
build/
[Bb]in/
[Oo]bj/
Run Code Online (Sandbox Code Playgroud)

我尝试了什么:

!/Libs/*/*.lib
!/Libs/x64/Release/*
Run Code Online (Sandbox Code Playgroud)

git pattern-matching gitignore

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

函数*实际*内的局部变量何时被分配

只是好奇这个.以下是相同功能的两个代码段:

void MyFunc1()
{
    int i = 10;
    object obj = null;

    if(something) return;
}
Run Code Online (Sandbox Code Playgroud)

而另一个是......

void MyFunc1()
{
    if(something) return;

    int i = 10;
    object obj = null;
}
Run Code Online (Sandbox Code Playgroud)

现在第二个有没有在某些事情是真的时分配变量的好处?或者,一旦调用函数并且将return语句移到顶部没有效果,总是会分配本地堆栈变量(在当前作用域中)?

dotnetperls.com文章的链接说:"当你在C#程序中调用一个方法时,运行时会分配一个单独的内存区域来存储所有局部变量槽.即使你不访问变量,这个内存也会在堆栈上分配.函数调用."

更新
下面是这两个函数的IL代码的比较.Func2指的是第二次剪断.似乎两个案例中的变量都是在开头分配的,但是在Func2()的情况下,它们稍后会被初始化.所以我猜这样没有任何好处.

ILDisassembler中的ILCode

.net c# stack memory-management local-variables

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

.NET - 在正在运行的进程内调用方法

有没有办法在正在运行的.NET程序集中调用方法.

问题是我有一个在系统启动时运行的.NET应用程序,并将自己置于系统托盘中.用户可以通过双击托盘图标打开应用程序对话框,但即使用户再次启动应用程序(并且已经运行),我也想显示该表单.目前在main方法中,我将正在运行的.NET程序集作为Process,但不知道如何获取对内部类/方法的引用.

我能够知道一个实例是否已经在运行但是想知道如何从我拥有的进程句柄中调用方法.当它是第二个实例时,我检查所有正在运行的进程并获得指向我已经运行的进程的指针.我想知道是否有一种方法在.NET(彻底反射或其他)中将使用此进程句柄并返回指向接口的指针.

- 已添加7月4日 - 有许多解决方案可以查找实例是否已在运行但我真正想要的是将流程转换为某个接口并在其上调用方法.或者使用一些参数将消息传递给正在运行的应用程序.

.net process

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

X.ToCharArray().长度EQUALS GetBytes(X).Length

string s = "test";
int charCount = s.ToCharArray().Length;
int byteCount = System.Text.Encoding.Default.GetBytes(s).Length;
Run Code Online (Sandbox Code Playgroud)

什么时候可以(charCount!= byteCount)发生?我相信Unicode字符但不是一般情况下.

.NET支持Unicode字符但是.NET的默认(System.Text.Encoding.Default)编码?"System.Text.Encoding.Default"显示"System.Text.SBCSCodePageEncoding"作为单字节的编码.

.net c# unicode encoding character-encoding

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