小编pub*_*ess的帖子

C#中的引用和意外结果

我对C#和Office自动化比较陌生,最近我发现自己试图获取对某人的Outlook收件箱的引用并按接收时间对电子邮件进行排序.直到我在网络上的其他地方找到一个解决方案,其中将收件箱分配给Microsoft.Office.Interop.Outlook.Items类型的本地变量,然后对局部变量执行排序并且它可以工作时,它才能工作.然而,问题是为什么?我认为在C#对象中是引用,当你声明一个新的Outlook.Inbox引用然后从用户的收件箱中分配它时,它只是作为实际电子邮件的附加指针,并不实际复制每封电子邮件到一个新的集合.所以它应该与在原始参考上调用Sort无异,对吧?显然我错了,所以我很感激解释.感谢名单!

using Outlook = Microsoft.Office.Interop.Outlook;    
...
Outlook.Folder oInbox = (Outlook.Folder)oApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

oInbox.Items.Sort("[Received]", true); //this doesn't produce expected results
Outlook.Items inboxFolder = (Outlook.Items)oInbox.Items;
inboxFolder.Sort("[Received]", true);  //this DOES sort the items!
Run Code Online (Sandbox Code Playgroud)

c# oop outlook reference office-automation

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

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

sprintf_s 和访问冲突

我一直在使用 C/C++ 程序在 Windows 上的 Visual Studio 中收到“0xC0000005:访问冲突读取位置错误”,并试图简化以说明我的问题。下面的代码运行得很好:

char tmp[1000];
ULONG64 val1 = 1;
sprintf_s(tmp, 1000, "%lu, %s, %s", val1, "true", "false");
Run Code Online (Sandbox Code Playgroud)

但是,当我向格式中添加额外的 unsigned long 时,会出现访问冲突,如下面的代码所示:

char tmp[1000];
ULONG64 val1 = 1;
ULONG64 val2 = 2;
sprintf_s(tmp, 1000, "%lu, %lu, %s, %s", val1, val2, "true", "false");
Run Code Online (Sandbox Code Playgroud)

c windows visual-c++

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