我有一个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剪贴板格式 - (忽略本机格式)
我已经看到我的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 :).我缺少一些标准或者一些内部机制吗?
如果给你一个大的n层项目(.NET),其中15,000行代码用"西班牙语"(变量,表格,类名等)编写,需要添加功能和修复错误,那么你的策略是什么呢? ?
编辑:编写原始软件的开发人员不懂英语,所以在这种情况下他们没用.
是否可以编写一个可以每天输出数百个应用程序的自动应用程序生成器?应用程序只是一系列二进制值.如果超级计算机每天生成数百万个组合并输出生成的具有不同大小的二进制文件.然后,这些二进制文件将"运行"以查看它们是否实际运行,如果它们确实运行,则会将这些二进制文件发送给某些测试人员以检查"生成的内容".
谁知道,我们可能会开始获得100%无错误的解决方案.
我有一个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) 只是好奇这个.以下是相同功能的两个代码段:
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()的情况下,它们稍后会被初始化.所以我猜这样没有任何好处.

有没有办法在正在运行的.NET程序集中调用方法.
问题是我有一个在系统启动时运行的.NET应用程序,并将自己置于系统托盘中.用户可以通过双击托盘图标打开应用程序对话框,但即使用户再次启动应用程序(并且已经运行),我也想显示该表单.目前在main方法中,我将正在运行的.NET程序集作为Process,但不知道如何获取对内部类/方法的引用.
我能够知道一个实例是否已经在运行但是想知道如何从我拥有的进程句柄中调用方法.当它是第二个实例时,我检查所有正在运行的进程并获得指向我已经运行的进程的指针.我想知道是否有一种方法在.NET(彻底反射或其他)中将使用此进程句柄并返回指向接口的指针.
- 已添加7月4日 - 有许多解决方案可以查找实例是否已在运行但我真正想要的是将流程转换为某个接口并在其上调用方法.或者使用一些参数将消息传递给正在运行的应用程序.
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"作为单字节的编码.