post:2015年5月23日 12:47

Visual Studio 2015 Community でaviutlのプラグインをビルドする方法

基本として、aufは実質的にDLLと同じ。出力するファイルの拡張子を変えるだけでOK。そしてdllとexeはとても似ているらしい。まあ単体で実行する為のエントリーポイントがあるexeと無いDLLって感じかな。多分。C++やった事無いです。普段はjavaとc#

VisualStudioは入れてある前提で、AviUtlのお部屋からAviUtl Plugin SDKをDLする。現時点では2012/6/19更新の「AviUtl Plugin SDK for ver0.99m以降」という名前。解答して、VisualStudioから新しいプロジェクトを作る。ここから説明開始!
言語はC++。Visual c++ってあるけど違いはよくわかりません。てかVisualじゃないC++無いです。コンソールアプリケーションではなくWin32プロジェクト。
imgTemp-2015-05-23-11-12-27
ウィザードが起動するので、次へ→アプリケーションの種類をDLLに、追加のオプションで空のプロジェクト。完了でおk
imgTemp-2015-05-23-11-16-38
ビルドする方法なので、ビルドしてaviutlで認識される所までやります。サンプルに使うプラグインはdisp_filter.auf。SDKの中から以下の3ファイルを選択します。disp_filter.rcも必要と思っていたけど要らないっぽいんだよな。何に使うんだろう・・・
imgTemp-2015-05-23-11-38-10
VisualStudioのプロジェクトファイルはこういう構成になっている訳で
imgTemp-2015-05-23-11-26-46
ProjectディレクトリにSDKから選択した3つのファイルを貼り付ける
imgTemp-2015-05-23-11-37-04
この段階でVisualStudioのソリューション エクスプローラーはこんな感じ。そもそもなんだけど、プロジェクトのディレクトリの中にいくらファイルを配置しても、それだけではVisualStudioからは認識されないのかな?F5押してもビルドだし、リフレッシュ的なコマンド無いし。このへんc#で開発しててもどうやって認識させればいいのか分からないし、JavaのEclipseではF5押せば自動的に認識してくれるからその辺良くわからない。
imgTemp-2015-05-23-11-33-26
ソース、ヘッダー、リソースをそれぞれ右クリック→既存の項目を追加 でファイルを追加する。追加するファイルは以下のとおり。これでSDKからコピーした3つのファイルが全て認識された
imgTemp-2015-05-23-11-40-07
disp_filter.cppを編集してビルドしていくけど、そのままだとエラーが出ると思う。
「IntelliSense: 型 “const char *” の値を使用して型 “TCHAR *” のエンティティを初期化することはできません」のエラー
imgTemp-2015-05-23-11-42-34
ソリューションエクスプローラーからプロジェクトのプロパティ→構成プロパティ→全般→文字セット を、Unicodeからマルチバイトに変更してOK。この項目に限らないけど、構成プロパティはDebugとReleaseで違うから注意
imgTemp-2015-05-23-11-44-42
実はこれだけじゃ駄目で、エラーも出ない箇所を直す必要がある。構成プロパティ→リンカー→入力→モジュール定義ファイル にdisp_filter.def を入れる。disp_filter.cppとfilter.hは自動的に認識してくれたのに、これだけは手動で指摘しないといけないんだね
imgTemp-2015-05-23-12-02-09
出力されるファイルの拡張子がdllなので、aufに変換する。構成プロパティ→全般→ターゲットの拡張子を.aufに変更。ピリオドが居るから注意
imgTemp-2015-05-23-12-06-57
この状態でビルドしたらOK。出力される先が、SolutionName\ProjectName\Debug ではなく、SolutionName\Debug\以下なのが微妙に謎
imgTemp-2015-05-23-12-10-14
何はともあれ、これでOK!
imgTemp-2015-05-23-12-11-55
imgTemp-2015-05-23-12-12-54

出力先を変えるにはここ。ここにフルパスを書くんじゃなくて、多分もっと別の設定箇所があるはず。$(Outdir)がSolutionName\Debug\になっているので。
imgTemp-2015-05-23-12-15-52
多分ここな気がする。確認してないです。
imgTemp-2015-05-23-12-17-29

VisualStudioのソリューション名、VisualStudioのプロジェクト名、各種ファイル名、ファイルの中に記述されたファイル名と同じ文字列。これらはどこまで同じにする必要があるのか、どこまで自由に書き換えていいのかを調べた。
imgTemp-2015-05-23-12-31-34
  • 出力した後のaufのファイル名は何かと同じにする必要は無い。自由に書き換えて良い
  • (1)と(2)のソリューション名、プロジェクト名は何にも依存せず自由に書き換えてよい
  • (3)と(6)も自由に書き換えて良い。最初の予想では(3)と(6)は同じ名前にする必要があると思っていたんだが、違うらしい。(6)の存在意義が不明になってしまった
  • (4)はdisp_filter.cppの#includeと同じ値にする必要がある
  • (5)は前述のモジュール定義ファイルの値と同じにする必要がある
  • (7)は変更不可。ビルドを通す事は出来るが、Aviutlから認識しなくなる。
と、そんな感じ。大体予想通りで直感的な仕様。


これでビルドが出来るようになったから、頑張って自作コードを動かすことが可能って事。やったね


参考URL
AviUtl オリジナルプラグイン公開サイト @ wiki – ビルド/とりあえず
AviUtlのプラグインフィルタをデバッグ
MinGWでAviUtlプラグイン作成
Diary 2005-1
AviUltプラグインの作り方
AviUtlプラグイン作成 – AviUtlプラグインWiki(仮、作成中)

コメントを残す

ブログオーナーにだけ送信したいメッセージはメール欄にどうぞ。名前とメール欄は任意。