バックグラウンド
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