1

私はこれの初心者です。私はC#でpropvariantをvariantに変換しようとしています

私はこのようなコードを持っています。

      public static object PropValueToVariant(PROPVARIANT Value)
    {
        object result;
        DateTime stTime;
        DateTime ftTime;
        object __Null;
        // Convert the prop variant to variant data type

        switch(Value.vt)
        {
            //@ Undeclared identifier(3): 'VT_I1'
            case VT_I1:
                //@ Unsupported property or method(C): 'bVal'
                result = Value.bVal;
                break;
            //@ Undeclared identifier(3): 'VT_UI1'
            case VT_UI1:
                //@ Unsupported property or method(C): 'bVal'
                result = Value.bVal;
                break;
            //@ Undeclared identifier(3): 'VT_I2'
            case VT_I2:
                //@ Unsupported property or method(C): 'iVal'
                result = Value.iVal;
                break;
            //@ Undeclared identifier(3): 'VT_UI2'
            case VT_UI2:
                //@ Unsupported property or method(C): 'uiVal'
                result = Value.uiVal;
                break;
            //@ Undeclared identifier(3): 'VT_I4'
            case VT_I4:
                //@ Unsupported property or method(C): 'lVal'
                result = Value.lVal;
                break;
            //@ Undeclared identifier(3): 'VT_UI4'
            case VT_UI4:
                //@ Unsupported property or method(C): 'ulVal'
                result = ((int)Value.ulVal);
                break;
            //@ Undeclared identifier(3): 'VT_I8'
            case VT_I8:
                //@ Unsupported property or method(C): 'hVal'
                //@ Unsupported property or method(D): 'LowPart'
                result = ((int)Value.hVal.LowPart);
                break;
            //@ Undeclared identifier(3): 'VT_UI8'
            case VT_UI8:
                //@ Unsupported property or method(C): 'uhVal'
                //@ Unsupported property or method(D): 'LowPart'
                result = ((int)Value.uhVal.LowPart);
                break;
            //@ Undeclared identifier(3): 'VT_BOOL'
            case VT_BOOL:
                //@ Unsupported property or method(C): 'boolVal'
                result = Value.boolVal;
                break;
            //@ Undeclared identifier(3): 'VT_R4'
            case VT_R4:
                //@ Unsupported property or method(C): 'fltVal'
                result = Value.fltVal;
                break;
            //@ Undeclared identifier(3): 'VT_R8'
            case VT_R8:
                //@ Unsupported property or method(C): 'dblVal'
                result = Value.dblVal;
                break;
            //@ Undeclared identifier(3): 'VT_CY'
            case VT_CY:
                //@ Unsupported property or method(C): 'cyVal'
                result = Value.cyVal;
                break;
            //@ Undeclared identifier(3): 'VT_ERROR'
            case VT_ERROR:
                //@ Unsupported property or method(C): 'scode'
                result = Value.scode;
                break;
            //@ Undeclared identifier(3): 'VT_DATE'
            case VT_DATE:
                //@ Unsupported property or method(C): 'date'
                result = Value.date;
                break;
            //@ Undeclared identifier(3): 'VT_FILETIME'
            case VT_FILETIME:
                //@ Unsupported property or method(C): 'filetime'
                //@ Unsupported function or procedure: 'FileTimeToLocalFileTime'
                FileTimeToLocalFileTime(Value.filetime, ftTime);
                //@ Undeclared identifier(3): 'FileTimeToSystemTime'
                FileTimeToSystemTime(ftTime, stTime);
                result = stTime;
                break;
            //@ Undeclared identifier(3): 'VT_CLSID'
            case VT_CLSID:
                //@ Unsupported property or method(C): 'puuid'
                result = Value.puuid.ToString();
                break;
            //@ Undeclared identifier(3): 'VT_BSTR'
            case VT_BSTR:
                //@ Unsupported property or method(C): 'bstrVal'
                result = Value.bstrVal;
                break;
            //@ Undeclared identifier(3): 'VT_LPSTR'
            case VT_LPSTR:
                //@ Unsupported property or method(C): 'pszVal'
                result = (Value.pszVal as string);
                break;
            //@ Undeclared identifier(3): 'VT_LPWSTR'
            case VT_LPWSTR:

                result = WideCharToString(Value.pwszVal);
                break;
            default:
                result = __Null;
                break;
        }
        return result;
    }

ケース名のエラーが発生するのはなぜですか?また、ulval、lvalなどを理解していません。

助けてくれてありがとう

4

2 に答える 2

0

MarshalクラスといくつかのP/Invoke呼び出しを使用する必要があります。

  • 16バイト配列を割り当てます(たとえば、を介してAllocCoTaskMem)(編集: 64ビットプロセス用に24バイトにします)
  • P/Invoke呼び出しでゼロにしますVariantInit
  • 次に、 PropVariantToVariantへのP / Invoke呼び出しを使用して実際の変換を実行し、このバッファーをバリアントデータで埋めます
  • これで、次の方法でオブジェクトを取得できます。Marshal.GetObjectForNativeVariant
  • そして、クリーンアップすることを忘れないでください:
    • AP/呼び出しを呼び出すPropVariantClear
    • 別のVariantClear
    • 次に、アンマネージメモリを。で戻しMarshal.FreeCoTaskMemます。
于 2016-09-15T14:30:47.533 に答える
-1

この関数は必要ありません。.netフレームワークにすでに実装されている関数は次のとおりです。http: //msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.getobjectfornativevariant.aspx

于 2012-10-19T16:08:40.147 に答える