我需要在C#中编写一个方法,使用Exchange Web服务(EWS)托管API从邮箱中读取电子邮件并给出当前电子邮件的ItemId/UniqueId,在收件箱中返回下一封电子邮件的ItemId/UniqueId.当前的电子邮件.
此外,由于各种原因,我要求该方法是一个静态无状态方法,也就是说,它不能依赖于在方法调用之间持续存在的任何成员/全局变量.因此,我不能简单地存储对FindItemsResults对象的实例的引用,并在每次调用该方法时移动到下一个Item.
我尝试使用以下代码实现该方法(仅简化示例,无错误检查):
using Microsoft.Exchange.WebServices;
using Microsoft.Exchange.WebServices.Data;
...
...
public string GetNextEmailId(string currentItemId)
{
// set up Exchange Web Service connection
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
service.AutodiscoverUrl("example.user@contoso.com");
// create SearchFilter to find next email after current email
ItemId itemId = new ItemId(currentItemId);
SearchFilter sfNextEmail = new SearchFilter.IsGreaterThan(EmailMessageSchema.Id, itemId);
// find next email in inbox
ItemView itemView = new ItemView(1);
itemView.OrderBy.Add(EmailMessageSchema.DateTimeReceived, SortDirection.Ascending);
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, sfNextEmail, itemView);
// return unique ID of next email
return findResults.Items[0].Id.UniqueId;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行此方法时,它会从service.FindItems行抛出以下异常:
System.ArgumentException:"验证失败.参数名称:searchFilter" …
我在c ++/cli托管类中传递引用变量时遇到问题!很明显如何在非托管类中进行,但我正在使用c ++/cli:/
这是我正在尝试做的一个例子:
pManager->checkBoundary( int^ mX, int^ mY - 1 );
void Manager::checkBoundary( int^ cX, int^ cY )
{
if( cY >= 0 )
{
cY = this->mBoardHeight;
}
else if( cY < mBoardHeight )
{
cY = 0;
}
else if( cX >= 0 )
{
cX = this->mBoardWidth;
}
else if( cX < mBoardWidth )
{
cX = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这是不正确的,但我如何传递参考var?
我正在尝试实现一些涉及托管C#和非托管C ++代码之间的封送处理数组的项目。我遇到了一个问题,我在网上找到的所有解决方案似乎都无效。我对此表示感谢。
我没有提供完整的代码,而是显示了问题的非常简化的部分。尽管它看起来很大,但非常简单-只是概念上的。只是想提供尽可能多的全貌。
C ++部分:
对象
class cObject
{
public:
//...constructor, destructor...
int Method_Known_Size(double* array, int size);
int Method_Unknown_Size(double* array);
...
void FreeArray(double* p);
}
Run Code Online (Sandbox Code Playgroud)
对象.cpp
int Method_Known_Size(double* array, int size)
{
//modify array somehow..
for(int i=0; i<size; i++) array[i] = i;
}
int method_Unknown_Size(double* array)
{
int size = 9;
array = new double[size];
for(int i=0; i<size; i++) array[i] = i;
}
Run Code Online (Sandbox Code Playgroud)
(跳过Caller.h) Caller.cpp
//...callers for constructor, destructor, for releasing unmanaged memory...
extern "C" int __stdcall Run_Known_Size(cObject* pObject, double* …Run Code Online (Sandbox Code Playgroud) 我得到这个例外:
LogLoaderUnmanaged.exe 中 0x75374B32 (KernelBase.dll) 处的未处理异常:0xE0434352(参数:0x80070002、0x00000000、0x00000000、0x0000000004、0x000000004)。
当我使用此代码(Application .exe 类型项目的一部分)调用我的 CLR 项目时:
int _tmain(int argc, _TCHAR* argv[])
{
_tprintf_s(_T("Press enter to start logging messages."));
_getch();
std::string app("Application");
std::string domain("Domain");
std::string message("Message");
UnmanagedLoggerClient::LogError(Debug, app.c_str(), domain.c_str(), message.c_str());
_tprintf_s(_T("Done."));
}
Run Code Online (Sandbox Code Playgroud)
错误发生在对 LogError 的调用上,它在我的 CLR DLL 的头文件中定义如下:
#ifdef UNMANAGEDLOGGERCLIENT_EXPORTS
#define WIN32PROJECT_API __declspec(dllexport)
#else
#define WIN32PROJECT_API __declspec(dllimport)
#endif
enum UnmanagedLogLevel
{
Debug = 0,
Error = 1
};
static class WIN32PROJECT_API UnmanagedLoggerClient
{
public:
static void LogError (UnmanagedLogLevel level, const char* app, const char* domain, const …Run Code Online (Sandbox Code Playgroud) 如果您编写了C#程序,并且部分代码是使用unsafe关键字编写的,那么该代码是否仍被视为“托管”代码?
即。它会在CLR下运行吗?
只是有一个关于这个问题的问题,我在使用 EWS 和创建邮件时遇到了这个问题。
\n\nI\xc2\xb4m 创建电子邮件并将其保存到我的收件箱。
\n\n EmailMessage message = new EmailMessage(_exchangeService);\n message.From = emailObject.SenderAddress;\n message.Subject = emailObject.Subject;\n message.Body = emailObject.Body\n message.ToRecipients.Add(email);\n message.CcRecipients.Add(emailObject.CC);\n message.IsRead = false;\n message.Save(WellKnownFolderName.Inbox);\nRun Code Online (Sandbox Code Playgroud)\n\n现在的问题是,EWS 正在将电子邮件创建为草稿。
\n\n是否可以将邮件标记为收入邮件?
\n\n谢谢你!
\n我遇到了一个问题.
在Unity中,我想反思一个私人领域.但我总是为fieldinfo获取null.我究竟做错了什么?
public abstract class _SerializableType
{
[SerializeField] private string name;
}
// because I am using a CustomPropertyDrawer for all inherited from _SerializeType
public class SerializableType<T> : _SerializableType { }
public class SerializableType : _SerializableType { }
[Serializable] public class CTech : SerializableType<_CouplingTechnology> { }
Run Code Online (Sandbox Code Playgroud)
所以使用这种方法实际上应该工作.
// type is CTech
// propertyPath in that case is "name"
FieldInfo info = type.GetField(propertyPath, BindingFlags.Instance
| BindingFlags.Public | BindingFlags.NonPublic);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我在具有自己的CustomInspector的托管库中调用此方法.所以它反映到每个领域并计算如何显示它.AppDomain是完全信任的.我不知道还有什么可能是重要的......
managed ×7
c# ×4
.net ×2
c++ ×2
clr ×2
unmanaged ×2
c++-cli ×1
email ×1
exception ×1
inheritance ×1
marshalling ×1
reflection ×1