0

カスタム コンテンツ プロセッサが原因で、モデルのコンテンツ プロセッサをプログラムで変更するか、ソリューション/プロジェクトから fbx ファイル プロパティ (XNA Framework コンテンツ パイプライン -> コンテンツ プロセッサ) を変更する必要があります。これは、このプログラムを使用するユーザーにスキン モデルを追加してこのプロパティを変更してもらいたいからです。事前に感謝し、質問が曖昧または繰り返しである場合はお詫び申し上げます.

アップデート

いくつかの調査で、プロジェクトにアクセスするためのソリューションの種類を見つけましたが、残念ながら、ソリューション/プロジェクト内のプロジェクトアイテムを取得しようとしているときにエラーが発生しました..プロジェクトのプロパティにアクセスできます(変更を試みていません)。

コードは次のとおりです (MSDN テンプレートのようなものです)。

    static void Main(string[] args)
    {
        EnvDTE80.DTE2 dte;
        object obj = null;
        System.Type t = null;

        t = System.Type.GetTypeFromProgID("VisualStudio.DTE.11.0", true);

        obj = System.Activator.CreateInstance(t, true);

        dte = (EnvDTE80.DTE2)obj;

        string solutionFile = 
            "C:\\Users\\The Wizard Of Code\\Documents\\Visual Studio 2012\\Projects\\ConsoleApplication2\\ConsoleApplication2.sln";

        MessageFilter.Register();
        //dte.MainWindow.Activate();

        /*Problem I think*/
        Solution2 soln = (Solution2)dte.Solution;
        soln.open(solutionFile);
        Console.WriteLine(soln.Item(1).ProjectItems.Item(1).Name);

        dte.Quit();
        MessageFilter.Revoke();

    }

エラー メッセージ : メッセージ フィルタは、アプリケーションがビジーであることを示しました。(HRESULT からの例外: 0x8001010A (RPC_E_SERVERCALL_RETRYLATER))

Update 2 メッセージ フィルター クラス: public class MessageFilter : IOleMessageFilter { // // IOleMessageFilter を含むクラス // スレッド エラー処理関数。

    // Start the filter.
    public static void Register()
    {
        IOleMessageFilter newFilter = new MessageFilter();
        IOleMessageFilter oldFilter = null;
        CoRegisterMessageFilter(newFilter, out oldFilter);
    }

    // Done with the filter, close it.
    public static void Revoke()
    {
        IOleMessageFilter oldFilter = null;
        CoRegisterMessageFilter(null, out oldFilter);
    }

    //
    // IOleMessageFilter functions.
    // Handle incoming thread requests.
    int IOleMessageFilter.HandleInComingCall(int dwCallType,
      System.IntPtr hTaskCaller, int dwTickCount, System.IntPtr
      lpInterfaceInfo)
    {
        //Return the flag SERVERCALL_ISHANDLED.
        return 0;
    }

    // Thread call was rejected, so try again.
    int IOleMessageFilter.RetryRejectedCall(System.IntPtr
      hTaskCallee, int dwTickCount, int dwRejectType)
    {
        if (dwRejectType == 2)
        // flag = SERVERCALL_RETRYLATER.
        {
            // Retry the thread call immediately if return >=0 & 
            // <100.
            return 99;
        }
        // Too busy; cancel call.
        return -1;
    }

    int IOleMessageFilter.MessagePending(System.IntPtr hTaskCallee,
      int dwTickCount, int dwPendingType)
    {
        //Return the flag PENDINGMSG_WAITDEFPROCESS.
        return 2;
    }

    // Implement the IOleMessageFilter interface.
    [DllImport("Ole32.dll")]
    private static extern int
      CoRegisterMessageFilter(IOleMessageFilter newFilter, out 
      IOleMessageFilter oldFilter);
}

[ComImport(), Guid("00000016-0000-0000-C000-000000000046"),
InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
interface IOleMessageFilter
{
    [PreserveSig]
    int HandleInComingCall(
        int dwCallType,
        IntPtr hTaskCaller,
        int dwTickCount,
        IntPtr lpInterfaceInfo);

    [PreserveSig]
    int RetryRejectedCall(
        IntPtr hTaskCallee,
        int dwTickCount,
        int dwRejectType);

    [PreserveSig]
    int MessagePending(
        IntPtr hTaskCallee,
        int dwTickCount,
        int dwPendingType);
}

コードの負荷について申し訳ありません

アップデート 3

なんとかプロパティにたどり着きましたが、プロジェクトまたはソリューションのアイテムを右クリックして右下のタブを取得したときに取得するプロパティではなく、ファイル プロパティでした (これはコードで行う必要があります)。

4

1 に答える 1

0

[ STAThread] main が問題を修正する前にRPC_E_SERVERCALL_RETRYLATER) ....

アップデート modelviewer.codeplex.com には、必要なものがありました。

于 2015-02-26T11:55:46.580 に答える