2

私のプログラムでは、mxmlc のコマンドライン コンパイル コマンドを使用するとエラーが発生します。このエラーは、埋め込みフォント名がシステム フォント リストで flex によって正しく識別されていないことに関連しています。

しかし、気まぐれで、コードを Flex Builder にコピーして、そこでコンパイルすることにしました。驚いたことに、それは機能し、私が指定したのと同じシステム名 (PMingLiU) を使用して適切なフォントを見つけました。

私の問題はロケールの問題である可能性があり、ロケールの考慮事項のためにシステムがフォント名を正しく識別できないのではないかと思いました。

コンパイル コードのロケールを en_US に設定しようとしましたが、役に立ちませんでした。そこで、Flex Builder が MXML コンパイラを呼び出す正確な方法と、mxmlc を直接実行する場合との違いを知っている人がいるかどうかを尋ねたいと思います。コマンド ライン パラメーターを取得するために mxmlc を独自の実行可能ファイルに置き換えようとしたため、mxmlc.exe を直接使用していないことがわかりました。

ちなみにOSはWindows XPです。

4

1 に答える 1

1

あなたの質問 (Flex Builder が mxmlc.exe に渡すコマンド ライン引数) に対する正確な回答はありませんが、メタ的な回答があります。コマンド ラインは、2 つの方法のいずれかを使用して見つけることができます。

1 つ目はプラットフォームに依存しませんが、小さな C++ プログラムをコンパイルする必要があります。同様の問題を解決するときに、以前にこのアプローチを使用したことがあります。できることは、単にコマンド ラインをファイルに出力するラッパー アプリケーションを作成することです。このアプリケーションをビルドし、mxmlc.exe の一時的な置換としてドロップします。Flex Builder がそれを実行すると、結果のファイル「cmdline.txt」にアクセスして、呼び出された完全なコマンド ラインを取得できます。

#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char* argv[])
{
  ofstream cmdLine;
  cmdLine.open("cmdline.txt");

  for (int i = 0; i < argc; i++) {
    cmdLine << argv[i];
    if (i < argc)
      cmdLine << " ";
  }

  cmdLine.close();
  return 0;
}

Flex Builder でこの汚いトリックを実行することに抵抗がある場合は、Windows で実行していると仮定する別の方法があります。WMIを使用して、実行中のすべてのプロセスを反復処理し、それらのコマンド ライン情報を取得できます。Ruby は私の選択した言語です。これには、Windows 用の Ruby インタープリターをインストールする必要があります。これは、Windows 用のワンクリック Ruby インストーラーで簡単に実行できます。

インストール後、Flex Builder がビルドを開始したらすぐに次のスクリプトを実行します。

require 'win32ole'
wmi = WIN32OLE.connect("winmgmts://")
processes = wmi.ExecQuery("select * from win32_process")

for process in processes do
    cmdLine = process.CommandLine
    puts "Command line: #{cmdLine}" if cmdLine =~ /mxmlc/
end

コマンドラインで「mxmlc」で開始されたプロセスに対してのみコマンドラインを出力する正規表現を追加しました(これは必要に応じて機能するはずです)。各プロセスを反復するより一般的な解決策として、次を含む行の末尾にある if 句を削除するだけです。

puts "Command line: #{cmdLine}" if cmdLine =~ /mxmlc/

これにより、StartRemoteThread を使用して低レベルの魔法を実行し、PEB 構造をナビゲートするという頭痛の種から解放されます。

これは、質問の性質を考慮し、開発OSに関する詳細情報なしで、私ができる最善のことです。これで問題が解決する場合は、投稿を編集して、同様の問題に直面している人々がこの解決策を見つけられるようにすることをお勧めします。「実行中のプロセスのコマンドライン引数を取得する方法」のようなタイトルの方が適切かもしれません。

于 2008-10-23T06:05:11.640 に答える