1

カスタム オブジェクトを RDC ウィンドウからホスト (ローカル) マシンにコピーしようとしています。失敗します。1) コピーと 2) 貼り付けに使用しているコードは次のとおりです。

1) リモート (RDC 経由でアクセスされる Windows XP 上で動作するクライアント):

            //copy entry
            IDataObject ido = new DataObject();
            XmlSerializer x = new XmlSerializer(typeof(EntryForClipboard));
            StringWriter sw = new StringWriter();
            x.Serialize(sw, new EntryForClipboard(entry));
            ido.SetData(typeof(EntryForClipboard).FullName, sw.ToString());
            Clipboard.SetDataObject(ido, true);

2) ローカル (ローカルの Windows XP x64 ワークステーションで実行されているクライアント):

                //paste entry
                IDataObject ido = Clipboard.GetDataObject();
                DataFormats.Format cdf = DataFormats.GetFormat(typeof(EntryForClipboard).FullName);

                if (ido.GetDataPresent(cdf.Name)) //<- this always returns false
                {
                    //can never get here!
                    XmlSerializer x = new XmlSerializer(typeof(EntryForClipboard));
                    string xml = (string)ido.GetData(cdf.Name);
                    StringReader sr = new StringReader(xml);
                    EntryForClipboard data = (EntryForClipboard)x.Deserialize(sr);
                }

ただし、同じマシンで完全に動作します。

ヒントはありますか?

4

2 に答える 2

1

あなたが調べることができるいくつかのことがあります:

  1. オブジェクトのシリアライゼーションによって、オブジェクトが本当に XML に変換されますか? おそらく、出力された XML はメモリ空間への参照を持っていますか? XML のテキストを見て確認してみてください。
  2. オブジェクトのシリアル化された XML バージョンが実際にある場合は、値をプレーン バニラ テキストとして保存し、.xml を使用しないのはなぜtypeof(EntryForClipboard)ですか? 何かのようなもの:

    XmlSerializer x = new XmlSerializer(typeof(EntryForClipboard));
    StringWriter sw = new StringWriter();
    x.Serialize(sw, new EntryForClipboard(entry));
    Clipboard.SetText(sw.ToString(), TextDataFormat.UnicodeText);
    

    次に、クライアント プログラムで行う必要があるのは、クリップボード内のテキストを逆シリアル化してオブジェクトに戻すことができるかどうかを確認することだけです。

于 2009-03-23T05:37:02.093 に答える