Bindings for the Windows API


投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/12/26 8:08
Guest 
ここでこんな質問していいのか迷いましたが、投稿します

タイトルの通り、WindowsAPIに関してなんですが、
こちらの記事の通りソースを修正してmakeすると、
win32/directx のdinput8.dにある
GUID_SysKeyboard
から11行が二重定義でエラーが出ます
uuid.dから、二重定義部分をコメントアウトするとエラー無くwin32.libが生成されるのですが、何か問題ありそうで怖いんですが、わかる人いますか?

それと、デフォルトではuuid.diになっていたので、uuid.dにリネームしたんですが、uuid.diという名前であることに意味があったのでしょうか?
よろしくお願いします
投票数:62 平均点:6.13
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/12/26 16:35
SHOO  管理人   投稿数: 658
>ここでこんな質問していいのか迷いましたが、投稿します

このような質問のためのフォーラムとなっているので、問題ありませんよw

なぜか現在dsource.orgに接続出来ない状況が続いております。なので憶測で回答することをお赦しください。

Bindings for the Windows APIのmakefileはgnu-makeのワイルドカードの機能を用いてコンパイルするファイルを決めていたと思いますが、こちらには.diが含まれていないのではないでしょうか。
なので、uuid.diファイルは本来コンパイルされないところ、uuid.dと名前を変える事で一緒にコンパイルされてしまい、名前の競合が起こったと考えられます。

また、.diファイルはインターフェースファイルといって、dmdコンパイラが吐くことのできる特殊なファイルで、importに必要な情報のみが記述されているファイルとされています。
従って、現在のdmdの仕様で利用する場合ならば、名前を変更する必要はないかと思います。

もし仮に、どうしても.dファイルでコンパイルしなければならないという状況となった場合は、
uuid.dファイル内で、
static import win32.directx.dinput8;
alias win32.directx.dinput8.GUID_SysKeyboard GUID_SysKeyboard;
等としたらとりあえずコンパイルが通るかもしれません。
(別名として定義しなおすことで二重定義を回避するという方法)
投票数:121 平均点:2.56
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/12/27 15:34
Guest 
SHOO様

ご返信ありがとうございます。

uuid.di ファイルに関してですが、ダウンロードした物をそのままmakeすると、
wtype.d や ole2.d 等が uuid.d をimportしている為、
エラーが出たので、やむなく uuid.d にリネームしてmakeした次第です。

こちらに投稿する前に、uuid.d から、directx/dinput8.d と二重定義になる部分だけをコメントアウトしたら、エラー無しで win32.lib が出来上がったのですが、先ほど uuid.d 内で dinput8.d をstatic importし、二重定義部分をaliasで再定義した所、今度は dinput8.d でIIDとGUIDが定義されていないとエラーが出ました・・・

directx/dinput.d で basetyps.d をimportしたら win32.lib が出来上がりましたが、前方参照エラー回避の修正以外にも、こんなに修正しないと出来上がらないものなのでしょうか。

多数の人が使用しているはずなので、makeの時点でエラーが出るのはこちらが何か間違っているのではないかと不安になりました・・・

とりあえずこのまま使ってみます。
ありがとうございました。
投票数:69 平均点:6.67
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/12/28 6:56
SHOO  管理人   投稿数: 658
なんでだろうと考えたのですが、importが通っていないからかもしれません。
makefileの、24,25行目を、

win32.lib : $(SOURCES)
$(DC) -I.. $^ -lib -of$@ $(DFLAGS)

このように書き換えたら通るかもしれません。

そういえば、最新のdmdを使用しているという前提で書いていますが、dmdのバージョンを書いていただけた方が、より正確に回答できるかと思います。

>多数の人が使用しているはずなので、makeの時点でエラーが出るのはこちらが何か間違っているのではないかと不安になりました・・・

多数の人が同じエラーが発生して、同じように書き換えまくって自力で何とかしている可能性が高いような…w
投票数:74 平均点:5.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/12/28 7:01
SHOO  管理人   投稿数: 658
あっと・・・ちなみに、本当に最新(trunkの最新版)をcheckoutしてコンパイルしている場合はさらにもう一つ修正が必要です。
rpcnsi.dの54行目、inoutをrefに書き換える必要があります。
投票数:99 平均点:3.33
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009/12/28 10:24
ゲスト 
ご返信ありがとうございます。
dmdのバージョンを書くのを忘れていました・・・すみません。
dmd2.029を使用しています。
引用:
なんでだろうと考えたのですが、importが通っていないからかもしれません。


仰るとおり、makefileを書き換えたら、uuid.diのままでmakeが通りました。

引用:
多数の人が同じエラーが発生して、同じように書き換えまくって自力で何とかしている可能性が高いような…w


確かにそんな気がしますw


質問をしている間にBindings for Windows APIのページが修正されてました。
ページの記載通りにダウンロードからやり直したら、問題なくwin32.libが出来上がりました。
おかげでDでwin32に触れるようになりました。
ありがとうございました。
投票数:112 平均点:3.84
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文

  条件検索へ


メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu