0

バックグラウンド

MFC/OLE に何か問題がありますか?

ドキュメントによると、 COleDateTime にはミリ秒の解像度があります。 http://msdn.microsoft.com/en-us/library/a1z81fxe(v=vs.80).aspx

しかし、日付型 DATE (VT_DATE) の非常に基本的な MFC/COM/OLE 関数に渡された 08:38:42 と 501 ミリ秒の C# DateTime は、使用する前に 08:38:43 に切り上げられます。

23:59:59.501 という明らかなケースでは、日付が翌日にカスケードされるのではないかと心配しています。

私の場合、データベースを検索したいのですが、System.DateTimeミリ秒を含むものを渡すと、次の秒または翌日にスキップすることがあります!

解像度を保持する .cpp ファイルの VT_DATE と ODL ファイルの DATE 以外の型はありますか?

ODL

[id(1)] void FindEntriesFromDate(DATE dateFrom);

CPP ディスマップ

DISP_FUNCTION(CMyClass, "FindEntriesFromDate", FindEntriesFromDate,VT_EMPTY,VTS_DATE)

CPPプロトタイプ

void FindEntriesFromDate(DATE dateFrom);

これが証拠です。

C# の datetime オブジェクトを構築し、ODL/CPP/H ファイルの DATE パラメーターを使用して、必要最小限の従来の C++ MFC OLE/COM プロジェクトに渡します。

切り捨て

System.DateTime(2013, 7, 12, 8, 38, 42, 499);
C++ dateFrom = 41467.360214108798
C++ OleDateTime(dateFrom).Format() results in 12/07/2013 08:38:42
C++ COleDateTime(dateFrom).GetSeconds() results in 42

切り上げする

System.DateTime(2013, 7, 12, 8, 38, 42, 500)
C++ dateFrom = 41467.360214120374
C++ OleDateTime(dateFrom).Format() results in 12/07/2013 08:38:43
C++ COleDateTime(dateFrom).GetSeconds() results in 43

完全な日ロールオーバー:

System.DateTime(2013, 7, 12, 23, 59,59, 501)
C++ dateFrom = 41467.999994224534
C++ OleDateTime(dateFrom).Format() results in 13/07/2013
C++ COleDateTime(dateFrom).GetSeconds() results in 0
4

0 に答える 0