C++ Win32 中的 C# DateTime.ToUniversalTime() [关闭]

Posted

技术标签:

【中文标题】C++ Win32 中的 C# DateTime.ToUniversalTime() [关闭]【英文标题】:C# DateTime.ToUniversalTime() in C++ Win32 [closed] 【发布时间】:2014-10-29 21:54:20 【问题描述】:

我正在尝试确定要在我的 C++ (Win32) 应用上使用的正确类型,该应用正在接收返回 C# DateTime.ToUniversalTime() 值的 API 调用的返回。

所以我的问题是: 我应该使用 U64 来存储 c# 函数的返回值吗?还是使用正确的 C++ 类型。

客户端 C++ 环境正在使用 Win32 + DirectX 利用 COM

没有 CLR、没有 WinRT、没有 CLI

【问题讨论】:

自定义 CLR 主机?通讯? C++/CLI?温特?与托管代码互操作的方法不止一种,您必须明确。发布一个sn-p。 Win32. DirectX 利用 COM - 没有 CLR,没有 WinRT !! 【参考方案1】:

相关 API 实际返回什么? ToUniversalTime 方法返回另一个 DateTime 对象。如果您想将它与 Win32 API 一起使用,您需要将其转换为 FILETIME 结构,如下所示:

ULARGE_INTEGER uli;
uli.QuadPart = DateTime->ToFileTime();

FILETIME ft;
ft.dwLowDateTime = uli.LowPart;
ft.dwHighDateTime = uli.HighPart;

然后您可以照常将FILETIME 转换为SYSTEMTIME

SYSTEMTIME st;
FileTimeToSystemTime(&ft, &st);

如果 API 方法返回 long long 或类似的,您可以简单地将其复制到上面显示的 uli.QuadPart 字段中。

【讨论】:

FileTime 不是 DateTime。我需要返回一个 DateTime ....我的客户不仅仅是 C++ 应用程序。我错过了什么?? @SDDeveloper 如果 API 返回一个 .NET DateTime 对象,那么您别无选择,只能使用该对象。这个答案只是为您提供了在拥有它后如何处理它的选项。 @SDDeveloper:您的问题暗示您在 Win32 应用程序中获取了 DateTime 对象并想知道如何处理它。如果这不是您要问的问题,则需要提供更多详细信息。 Cloud api 返回一个 DateTime ..yes 但 C++ 没有 datetime 类型,所以我需要找出在 C++ 端使用什么类型才能获得 datetime。 Cloud API 也被 ios、Java、DotNet 应用程序使用......所以如果可以的话,我宁愿坚持使用 DateTime...... @JonathanPotter ULARGE_INTEGER 也是我应该在 C++ 客户端上使用的类型,以便存储然后操作 API 返回的 DateTime 值??

以上是关于C++ Win32 中的 C# DateTime.ToUniversalTime() [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 C++(win32 应用程序)中使用 C# 类时出现 EEFileLoadException

GDI+ DrawImage 在 C++ (Win32) 中比在 C# (WinForms) 中慢得多

将对象列表从 c# 传递到糟糕的 c++ win32 本机 dll 的最有效方法是啥?

C++ CLR win32 还是其他?

使用 C# 中的 C++ 类

Win32Api - 窗口名称属性