C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: コンパイル時のコマンドラインについて


(過去ログ 40 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■21221 / inTopicNo.1)  コンパイル時のコマンドラインについて
  
□投稿者/ 鶏唐揚 (209回)-(2008/06/27(Fri) 11:31:11)

分類:[その他の言語] 

2008/06/27(Fri) 16:14:25 編集(投稿者)

[VB2005/D言語2.014]

お世話になっております。
今回はD言語も絡めた質問です

VB2005でD言語コンパイラの簡易フロントエンドを作っています。

コンパイラ呼び出し時のコマンドラインに、
ソースファイルのパスやコンパイル先のパスを指定するのですが
パスに日本語が含まれているとうまくコンパイルできません。

おそらく文字エンコードの関係だと思うのですが、
ためしにDコンパイラにパスを投げる簡単なバッチファイルを作り
ソースをD&Dしてみたところ、正常にコンパイルできたので
VB側の問題だと考えています。

VB側ではProcessクラスでStartInfoのArgmentsプロパティにコマンドライン引数を
設定してやってますので、Argumentsプロパティに設定する文字列を
System.Text.Encodingでいろいろ変換しつつ試していますが、
解決できません。

日本語が含まれるパスでもコンパイルを通すにはどうすればよいのでしょうか…
最悪はバッチファイルを噛ませてやろうと考えています

以上、よろしくお願いします
引用返信 編集キー/
■21224 / inTopicNo.2)  Re[1]: コンパイル時のコマンドラインについて
□投稿者/ よねKEN (158回)-(2008/06/27(Fri) 11:49:24)
> VB2005でD言語コンパイラの簡易フロントエンドを作っています。
>
> コンパイラ呼び出し時のコマンドラインに、
> ソースファイルのパスやコンパイル先のパスを指定するのですが
> パスに日本語が含まれているとうまくコンパイルできません。

具体的にはどんなパスでしょうか?
日本語が原因なのは間違いないでしょうか。
例えば、空白が含まれるパスだと""で囲ってやる必要がありますが、その辺の問題ではないですよね?

> おそらく文字エンコードの関係だと思うのですが、
> ためしにDコンパイラにパスを投げる簡単なバッチファイルを作り
> ソースをD&Dしてみたところ、正常にコンパイルできたので
> VB側の問題だと考えています。

バッチファイルにD&Dしたときにバッチファイルが受け取ったパスの内容は
確認されましたでしょうか?確認されて想定しているパスと同じでしたか?
(8.3形式で渡されていると日本語が含まれない形に変わっているかもしれませんし)


引用返信 編集キー/
■21226 / inTopicNo.3)  Re[2]: コンパイル時のコマンドラインについて
□投稿者/ 鶏唐揚 (210回)-(2008/06/27(Fri) 12:04:14)
2008/06/27(Fri) 13:13:59 編集(投稿者)

No21224 (よねKEN さん) に返信
> 日本語が原因なのは間違いないでしょうか。
> 例えば、空白が含まれるパスだと""で囲ってやる必要がありますが、その辺の問題ではないですよね?
パス内の空白の問題はD言語に限らないことなので、常に""で括るようにしています。

> バッチファイルにD&Dしたときにバッチファイルが受け取ったパスの内容は
> 確認されましたでしょうか?確認されて想定しているパスと同じでしたか?
> (8.3形式で渡されていると日本語が含まれない形に変わっているかもしれませんし)
確認しましたが、日本語がそのまま含まれていました。
VB側と同じ状態です。

> 具体的にはどんなパスでしょうか?
'---VBから抜粋.filenameにはソースファイルのフルパス"C:\Documents and Settings\hoge\デスクトップ\test.d"
'Binフォルダを追加
BinPath = Combine(GetDirectoryName(filename), "Bin")
'ソースファイル名から拡張子を取り除いて出力ファイル名に付加
BinPath = Combine(BinPath, GetFileNameWithoutExtension(filename))
'コマンドライン引数設定
cmdProc.StartInfo.Arguments = """" & filename & """ -of""" & BinPath & """ -O -release"

'拡張子を省いたのは、スイッチによってはexeを出力するとは限らないから
'コンパイラに任せる

しかし、エラー文からして、スペースで切られてるような感じです。
 OPTLINK (R) for Win32 Release 8.00.1
 Copyright (C) Digital Mars 1989-2004 All rights reserves.
 C:\Documents.obj
 Error 2: File Not Found C:\Documents.obj
 --- errorlevel 1

リンカがオブジェクトファイルを見つけられていない模様。
コンパイラがリンカに投げるパスが""で括られないのか…?もしかして。
引用返信 編集キー/
■21229 / inTopicNo.4)  Re[3]: コンパイル時のコマンドラインについて
□投稿者/ 鶏唐揚 (211回)-(2008/06/27(Fri) 13:30:22)
2008/06/27(Fri) 13:30:41 編集(投稿者)

さらにいろいろ試していたら、
 # , [ ] ^ = + ' ;
がパスに含まれているとリンカがコケます。
上記とは関係ないですが。

#は時折使うことがあるので不便…
引用返信 編集キー/
■21247 / inTopicNo.5)  Re[4]: コンパイル時のコマンドラインについて
□投稿者/ ネタ好き (502回)-(2008/06/27(Fri) 19:50:35)
No21229 (鶏唐揚 さん) に返信
Qtを試すのもいいかもしれません。
引用返信 編集キー/
■21266 / inTopicNo.6)  Re[5]: コンパイル時のコマンドラインについて
□投稿者/ 鶏唐揚 (213回)-(2008/06/28(Sat) 22:37:30)
No21247 (ネタ好き さん) に返信
> ■No21229 (鶏唐揚 さん) に返信
> Qtを試すのもいいかもしれません。
Qtを調べるとC++が多く出てきましたが、Dについてもう少し調べてみます。
とりあえず解決してもしなくても解決済みにしておきます。

#ファイル名に日本語が含まれてるとしっかりエラーはいてきたので
 仕様として諦める方向も考えてます
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -