2012-03-29 10 views
2

c/C++のFILETIMEからVARIANTまたは_variant_tを作成したいとします。今FILETIMEからバリアントを作成

FILETIME ft; 
//Populate ft 
VARIANT vFt; 
VariantInit(&vFt); 
vFt.vt = VT_FILETIME; 

、どのように私はVFT内部フィートを設定します:
基本的に、これは私が何をしたいのですか?

誰でもこの手伝いできますか?

おかげで、答えは Saurabh

+0

本当に2回やっていますか、それともコピー/ペーストエラーですか? –

+0

コピー貼り付けエラーです。 – Paws

答えて

0

は、あなたがVARIANTでFILETIMEを格納することはできません。

* VT_FILETIME    [P]  FILETIME 

音符[P]、およびヘッダファイルに上記キー:ヘッダファイルから - ない変異体

* * [V] - may appear in a VARIANT 
* * [T] - may appear in a TYPEDESC 
* * [P] - may appear in an OLE property set 
* * [S] - may appear in a Safe Array 

FILETIMEは、OLEプロパティセットに表示されることができます。

代わりに使用できるVT_DATEがあります。

+0

私は、バリアントを受け入れるC++(syncReadRaw)のOPC HDAオートメーション関数を呼び出す必要があります。このバリアントには、相対時間(文字列として)または絶対時間(FILETIMEとして)を含めることができます。私は絶対時間をこの関数に送る必要があります。これを達成するための他の選択肢はありますか?ありがとう。 – Paws

+0

OPCのドキュメントにはエンコード方法が記載されていませんか? – JTeagle

+0

残念ながら、彼らはC++の実例を与えていません。彼らはVBのために1つを与えましたが、相対的な時間だけを使用しました。だから、FILETIMEを送ることができない場合、絶対時間(30-Mar-2012 10:15:23と言う)を、数学を使って相対的な時刻に変換することを考える必要があります。 – Paws

1

に役立ちます願っています。ここで私はそれをいくつかのステップを取るATLComTime.hライブラリを使用して行った方法です。

FileTime fileTime = yourFileTime; 
// dateFileTime will automatically cast to DATE when used as a parameter 
COleDateTime dateFileTime(fileTime); 

DATEはCOMフレンドリータイプなので、メソッドパラメータとして 'dateFileTime'変数を指定するだけで済みます。それでもVARIANTを使用する場合は、 'dateFileTime'変数をVARIANTに設定するだけです。 (まだC++で)と呼ばれる方法で

VARIANT varDate; 
VariantInit(&varDate); 
varDate.vt = VT_DATE; 
varDate.date = dateFileTime; 
// Use the varDate varaible 
// ... call some method or use locally 
// Don't forget to clear the VARIANT from memory after use 
VariantClear(&varDate); 

、すなわちバックDATE変数からFILETIMEを取得。 COleDateTimeはFILETIMEの代わりにSYSTEMTIMEを与えたいので、いくつかのフープを飛び越えなければなりません。

FILETIME fileTime; 
if (variantDateTime.vt == VT_DATE) // only use if DATE was put into a VARIANT 
{ 
    COleDateTime oleDateTime(variantDateTime.date); 
    SYSTEMTIME sysTime; 
    oleDateTime.GetAsSystemTime(sysTime); 
    SystemTimeToFileTime(&sysTime, &fileTime); 
} 

VARIANTを使用していない場合は、DATE変数を使用してCOleDateTime型を初期化できます。

COleDateTime oleDateTime(dateVariable); 
... // etc as above 

その上で述べたようにはスコッツ答えよりも少し多くの作業だが、COMインターフェイスの障壁を越えFILETIMEを取得する別の方法です。

関連する問題