約 2,010,477 件
https://w.atwiki.jp/progtips/pages/37.html
DLLを使う側のソースコード foo.cpp コンパイル cl /EHsc /Ox /nologo foo.cpp ソースコード #include cstdio #include windows.h #include io.h #include string using namespace std; class Importer { protected HMODULE dll; public string Msg; bool _Open(const string& dllname) { dll = LoadLibrary(dllname.c_str()); if (dll==NULL) { Msg = Importer DLL import fault \ ; Msg += dllname; Msg += \ . ; return false; } return true; } ~Importer() { if (dll) { FreeLibrary(dll); dll = 0; } } }; class MyImporter public Importer { public typedef int (*TyIntFunc)(int); typedef const char* (*TyDesc)(); TyIntFunc IntFunc; TyDesc Desc; bool operator()(const string& filename) { if (!_Open(filename)) { return false; } void* farproc[]={ &IntFunc, &Desc, }; const char* names[]={ Func , Description , }; for (int i=0; i 2; ++i) { FARPROC& ref = *((FARPROC*)farproc[i]); ref = GetProcAddress(dll, names[i]); if (ref==0) { Msg = Importer Function import fault \ ; Msg += names[i]; Msg += \ on \ ; Msg += filename; Msg += \ . ; return false; } } Msg = LoadFunc OK ; return true; } }; int main() { _finddata_t f; intptr_t hf = _findfirst( plugins/*.plugin.dll , &f); if (hf==-1) { puts( .plugin.dll not found ); return 0; } do { MyImporter mi; if (mi(string( plugins/ )+f.name)==false) { printf( %s\n , mi.Msg.c_str()); } else { printf( %-20s %d\n , mi.Desc(), mi.IntFunc(12345)); } } while (_findnext(hf,&f)==0); _findclose(hf); return 0; } div100.ja.plugin.cpp コンパイル cl /LD /Ox /nologo %%f ソースコード #define DLLFUNC extern C __declspec(dllexport) DLLFUNC const char* Description(void) { return 100で割る ; } DLLFUNC int Func(int x) { return x % 100; } 解説 exportする側はextern C がベター。C++モードの関数名は ?Func@@YAHH@Z 、 ?Description@@YAPBDXZ のような名前になるので、アクセスが面倒になってしまう。 実装その2 #include map #include string using namespace std; #define DLLFUNC extern C __declspec(dllexport) #define T(a,b) rsc[L## #a] = L##b; class SR { map rsc; public SR() { T(Name, Bascinet The Adventure ) T(Lang, 日本語 (.ja) ) } const wchar_t* operator[](const wchar_t* s) const { map const_iterator i = rsc.find(s); if (i==rsc.end()) { return L ; } return i- second.c_str(); } }; DLLFUNC const SR& StringResource(void) { static const SR rsc; return rsc; } DLLFUNC const wstring& Desc(int x) { static const wstring s(L 日本語(.ja)リソース ); return s; } #include clocale #include cstdio #include windows.h #include map #include io.h #include string using namespace std; class SR { map rsc; public SR() { } const wchar_t* operator[](const wchar_t* s) const { map const_iterator i = rsc.find(s); if (i==rsc.end()) { return L ; } return i- second.c_str(); } }; class Importer { protected HMODULE dll; public string Msg; bool _Open(const string& dllname) { dll = LoadLibrary(dllname.c_str()); if (dll==NULL) { Msg = Importer DLL import fault \ ; Msg += dllname; Msg += \ . ; return false; } return true; } ~Importer() { if (dll) { FreeLibrary(dll); dll = 0; } } }; class MyImporter public Importer { public typedef const SR& (*TyStringResource)(); typedef const wstring& (*TyDesc)(); TyStringResource StringResource; TyDesc Desc; bool operator()(const string& filename) { if (!_Open(filename)) { return false; } void* farproc[]={ &StringResource, &Desc, }; const char* names[]={ StringResource , Desc , }; for (int i=0; i 2; ++i) { FARPROC& ref = *((FARPROC*)farproc[i]); ref = GetProcAddress(dll, names[i]); if (ref==0) { Msg = Importer Function import fault \ ; Msg += names[i]; Msg += \ on \ ; Msg += filename; Msg += \ . ; return false; } } Msg = LoadFunc OK ; return true; } }; int main() { setlocale(LC_ALL, Japanese ); _finddata_t f; intptr_t hf = _findfirst( plugins/*.plugin.dll , &f); if (hf==-1) { puts( .plugin.dll not found ); return 0; } do { MyImporter mi; if (mi(string( plugins/ )+f.name)==false) { printf( %s\n , mi.Msg.c_str()); } else { wprintf(L Language %s\n , mi.Desc()); const SR& sr = mi.StringResource(); wprintf(L Name %s\n , sr[L Name ]); } } while (_findnext(hf,&f)==0); _findclose(hf); return 0; }
https://w.atwiki.jp/vst_prog/pages/50.html
テストメニュー VSTの作り方 Effector TipsEffector Tips Menu Effector Tips Delay Menu Effector Tips Chorus Menu VST Tips(準備中)VST Tips Menu VST Tips Design Menu VST Tips Preparation Menu ここを編集
https://w.atwiki.jp/vst_prog/pages/30.html
リンク VST開発 Daichi Laboratory Synth1作者様のページ。シンセプログラミングやVSTiシンセのサンプルソースがある g200kg Music Software Volvox、KnobMan、SkinMan等の作者様のページ。KnobMan、SkinManはVSTのGUIを作るうえで欠かせないツール。 オリジナルVST製作奮闘記 (2007年末より更新停止?) Sam s Hard Soft DIY (C++BuilderでのVST Plugin作成法。更新停止?) VST開発 - Myun2Wiki (更新停止?) aikeの日記 (時々VST関連の話題がある) CommentOut? (時々VST関連の話題がある) エフェクタアルゴリズム、仕組み等 シンセサイザーの仕組み アナログシンセサイザー WIKI 文系にもわかるアナログ・シンセサイザー超初心者入門 おとなのためのアナログシンセ秘密基地計画 シンセ講座 信号処理全般 Music-DSP ディレイ 株式会社エー・アール・アイ ディレイ -音響機器 擬似ステレオ化 スペースソフト 擬似ステレオ化 MIDI規格 T s Square MIDIとDTMの広場 海苔のDTM生活 MIDIの基礎知識 海苔のDTM生活 付録 MIDI関連 その他、技術情報 ローランド株式会社 BOSS Point of Performance 株式会社エー・アール・アイ 音響技術と機器開発 2ch VST Plugins Development 3.0 サウンドプログラミング5
https://w.atwiki.jp/chugoku/pages/152.html
Windowsの場合、DLL 共有ファイルは以下のフォルダにあれば使える。 1.開発したアプリケーションの実行可能ファイル (.exe) があるディレクトリ(フォルダ) 2.カレントディレクトリ(カレントフォルダ) .exeのプログラムでフォルダを移動しない限り大抵1.と同じ 実行ファイルであるリンクファイルのExplorerのプロパティの作業フォルダのこと。コマンドでカレントフォルダの変更はcd。 3.Windowsのシステムディレクトリ(システムフォルダ) ? \windows\system32 4.Windows ディレクトリ(フォルダ) 5.環境変数のPATHに設定されているディレクトリ 名前 コメント 「今日の訪問数 - 」 「昨日の訪問数 - 」 「今までの訪問数 - 」
https://w.atwiki.jp/dtmer/pages/114.html
ここはtie2478によるVST製作日記です。 tie2478はプログラミングに関しては最低限ありますが、 まだVSTの製作に関して精通してるわけじゃないので、 初心者がVST作成に足掻く様子を奮闘日記などと大層なことをいいながら綴っていきます。 製作を指南するためのものでなく、初心者目線からいろいろとやっていくためのものなので、 参考にならないところも一杯あります。 最終的に一人前のVSTが完成したら終了です。 不定期連載ではありますがよろしくお願いします^ VSTをSynthMakerで作る(現在のメインコンテンツ) Cのコンテンツを停止してる理由のコンテンツ。 もちろん将来的にCでも行いますが、原理を理解するためにも先にこちらで一人前のものを完成させたいです。 SynthMakerはシェアソフトですが、音、特にシンセサイザーの構造についてやや突っ込んだ解説をしていくつもりなので、 原理を理解したいなぁという人にもわかりやすく努めていきたいです^ SynthMakerについてはこちら。 回 タイトル 目的 追記 第1回 SynthMaker奮闘日記~その1 発音 第2回 SynthMaker奮闘日記~その2 正弦波の生成 第3回 SynthMaker奮闘日記~その3 非正弦波の生成、その1 「のこぎり波」 三角波について間違いがあったので修正しました。 第4回 SynthMaker奮闘日記~その4 非正弦波の生成、その2 「方形波」「三角波」 三角波について間違いがあったので修正しました。 SynthMaker奮闘日記~番外1 正弦波の合成実験用アプリケーション 「VStie - Add 10 Waves」の配布 SynthMaker奮闘日記~番外2 正弦波を整流しよう 突発的にまったく関係のないことをやりたくなったので。 第5回 SynthMaker奮闘日記~その5? 簡単なシンセのオシレーターを作ってみよう (予定) VSTをC言語で制作する場合(更新停止中) VSTをC言語で作るための準備
https://w.atwiki.jp/wiki3_ao/pages/188.html
Windows向けの一般的なVorbis DLLについての解説 これは、libvorbisのDLLについての説明である。 (libvorbisから派生したaoTuVなども同様) VorbisのDLLは3種類ある。 さらにこれらのファイルの使用にはliboggのDLLであるogg.dllが必要。 vorbis.dll コアライブラリ。基本的なエンコード・デコード処理を行う。 必ず必要なライブラリ。 vorbisenc.dll エンコードの初期化系処理を行う。 これに含まれるAPIはvorbis.dllにも通常含まれるため、vorbis.dllで代用できる。 vorbisfile.dll デコード処理のラッパー。vorbisfileのAPIを使用する場合は必須。 含まれるAPI (執筆時のXiph.Org SVN libvorbis trunkより) vorbis vorbis_info_init vorbis_info_clear vorbis_info_blocksize vorbis_comment_init vorbis_comment_add vorbis_comment_add_tag vorbis_comment_query vorbis_comment_query_count vorbis_comment_clear vorbis_block_init vorbis_block_clear vorbis_dsp_clear vorbis_granule_time vorbis_analysis_init vorbis_commentheader_out vorbis_analysis_headerout vorbis_analysis_buffer vorbis_analysis_wrote vorbis_analysis_blockout vorbis_analysis vorbis_bitrate_addblock vorbis_bitrate_flushpacket vorbis_synthesis_headerin vorbis_synthesis_init vorbis_synthesis_restart vorbis_synthesis vorbis_synthesis_trackonly vorbis_synthesis_blockin vorbis_synthesis_pcmout vorbis_synthesis_lapout vorbis_synthesis_read vorbis_packet_blocksize vorbis_synthesis_halfrate vorbis_synthesis_halfrate_p vorbis_synthesis_idheader vorbis_encode_init vorbis_encode_setup_managed vorbis_encode_setup_vbr vorbis_encode_init_vbr vorbis_encode_setup_init vorbis_encode_ctl vorbis_version_string vorbisenc vorbis_encode_init vorbis_encode_setup_managed vorbis_encode_setup_vbr vorbis_encode_init_vbr vorbis_encode_setup_init vorbis_encode_ctl vorbisfile ov_clear ov_open ov_open_callbacks ov_bitrate ov_bitrate_instant ov_streams ov_seekable ov_serialnumber ov_raw_total ov_pcm_total ov_time_total ov_raw_seek ov_pcm_seek ov_pcm_seek_page ov_time_seek ov_time_seek_page ov_raw_seek_lap ov_pcm_seek_lap ov_pcm_seek_page_lap ov_time_seek_lap ov_time_seek_page_lap ov_raw_tell ov_pcm_tell ov_time_tell ov_info ov_comment ov_read ov_read_float ov_test ov_test_callbacks ov_test_open ov_crosslap ov_halfrate ov_halfrate_p ov_fopen
https://w.atwiki.jp/wnt0/pages/18.html
static リンクで、new しないで使うようにすると、 DLL に変更を加えたときに、アプリもビルドしなおさないといけない。 dynamic リンクのクラスDLLの作り方 http //www2s.biglobe.ne.jp/~ragnarok/program/win32/class_of_cpp_in_dll.htm http //hp.vector.co.jp/authors/VA041250/doc/plugin/#CHAP5_8 http //hp.vector.co.jp/authors/VA019517/howtodll.html MSDN http //msdn.microsoft.com/ja-jp/library/1ez7dh12(v=VS.80).aspx http //msdn.microsoft.com/ja-jp/library/cc429019.aspx (VS2005) STLクラスからの派生クラスを__declspec(dllexport)する場合の警告について http //msdn.microsoft.com/ja-jp/library/esew7y1w(v=vs.80).aspx extern "C" について http //www.geocities.jp/ky_webid/cpp/language/038.html DLL 側 ExportClass.h class ExportClass { public virtual void Func(void) = 0; virtual void Destroy(void) = 0; }; extern "C" __declspec(dllexport) ExportClass* CreateExportClassInstance(void); ExportClassImp.h #include "ExportClass.h" class ExportClassImp public ExportClass { public // 面倒なのでインライン ExportClassImp() { } void Func(void) { // 処理 } void Destroy(void) { delete this; } }; ExportClass.cpp #include "ExportClass.h" #include "ExportClassImp.h" BOOL APIENTRY DllMain() { // 省略 } __declspec(dllexport) ExportClass* CreateExportClassInstance(void) { return new ExportClassImp; } アプリ側 ExportClass.h class ExportClass { public virtual void Func(void) = 0; virtual void Destroy(void) = 0; }; extern "C" __declspec(dllimport) ExportClass* CreateExportClassInstance(void); ImportApp.cpp #include "ExportClass.h" typedef ExportClass* (*tagCreateExportClassInstance)(void); void ImportFunction(void) { HMODULE hDLL = LoadLibrary(_T("ExportClass.dll")); if (hDLL == NULL) { // error } tagCreateExportClassInstance create_func = (tagCreateExportClassInstance) GetProcAddress(hDLL, "CreateExportClassInstance"); if (create_func == NULL) { // error } // ExportClass インスタンスの生成 ExportClass *export_class = create_func(); // クラスメソッドの使用 export_class- Func(); export_class- Destroy(); FreeLibrary(hDLL); return 0; }
https://w.atwiki.jp/civilization/pages/290.html
MOD/作成情報/CvGameCoreDLL.dllの作り方 MOD/作成情報/CvGameCoreDLL.dllの作り方 [#p81ecb84] 概要 [#ya1ba6e4] 参考URL [#v76addc5] Visual C++ 2008 Express Edition のインストール [#e3c873d8] Visual C++ Toolkit 2003 のインストール [#qdb5b418] マルチスレッドライブラリのダウンロード [#k67f6eb7] Microsoft R Windows Server 2003 R2 Platform SDK のインストール [#y4c651ce] SDKとmakefileの入手 [#m19b521d] プロジェクトの作成 [#w94e6fb6] ビルド [#ea3b5844] 動作確認 [#v5811ab9] 概要 Visual C++ 2008 Express Editionを使ってCvGameCoreDLL.dllを作る方法を説明します。Civ4 BtS 3.13 日本語版を使用。 参考URL 第9回CivilizationIVMOD解説講座‐ニコニコ動画(ββ) この文書はほぼこの動画をテキスト化したものです。動画の作者の人ありがとう。 第10回CivilizationIVMOD解説講座‐ニコニコ動画(ββ) BtS 3.13 用SDKの入手法 Installing and using the SDK - Civilization Fanatics Forums Civfanaticsのスレッド Civilization Fanatics Forums - Downloads Database - Makefile/Instructions BTS 3.17 SDK / Debugging Visual C++ 2008でSDKを開発する方法の解説。このページを書いてから存在に気付いたぜ…… Visual C++ 2008 Express Edition のインストール http //www.microsoft.com/japan/msdn/vstudio/Express/ #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (50%) 上記URLからダウンロードしてセットアップを実行。 Visual C++ Toolkit 2003 のインストール http //kael.civfanatics.net/files/VCToolkitSetup.exe マルチスレッドライブラリのダウンロード http //kael.civfanatics.net/files/msvcrt.lib http //kael.civfanatics.net/files/msvcrtd.lib http //kael.civfanatics.net/files/msvcprt.lib C \Program Files\Microsoft Visual C++ Toolkit 2003\lib に上記の3ファイルを置く。 Microsoft R Windows Server 2003 R2 Platform SDK のインストール http //www.microsoft.com/downloads/details.aspx?FamilyId=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB SDKとmakefileの入手 CvGameCoreDLL.dllのソースコードとビルドに必要なライブラリがSDKとしてBtS英語版には同梱されています。しかし日本語版には含まれていないので、どこからか探してくる必要があります。今回はCiv4 BTS Unofficial Patchのリポジトリに入っている修正前のSDKを使います。 http //civ4btspatch.svn.sourceforge.net/viewvc/civ4btspatch/CvGameCoreDLL/trunk/?pathrev=2 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (50%) ページ下部の「Download GNU tarball」からダウンロードして解凍。 パッチ付属のSDKを使う場合、makefileが含まれていないため、この辺から別途makefileを入手し、CvGameCoreDLL直下に放り込む。 TOOLKIT=D /Programme/Microsoft Visual C++ Toolkit 2003/ PSDK=D /Programme/Microsoft Platform SDK のパスは自分の環境に合わせて修正すること。 プロジェクトの作成 Visual C++ 2008 を起動してプロジェクトを新規作成。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (50%) 左ツリー「プロジェクトの種類」の「全般」を選択、画面右テンプレートで「メイクファイル プロジェクト」を選択。画面下のプロジェクト名と保存場所は適宜。「ソリューションのディレクトリを作成」はとりあえずオフに。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (50%) ウィザードで設定。 デバッグ構成の設定 ビルドコマンドライン nmake Debug 消去コマンド nmake clean_Debug #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (50%) リリース構成の設定 デバック構成と同じ off ビルドコマンドライン nmake Final_Release 消去コマンド nmake clean_Final_Release #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (50%) 入力後「完了」で設定終了。 ダウンロードしたSDKのファイルをすべてプロジェクトのフォルダにコピー #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (50%) ビルド ビルドの対象をReleaseにして #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (50%) 開始! #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (50%) 文字化けでエラー。CvGameTextMgr.cpp 2092行をとりあえずコメントアウトして凌ぐ。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (50%) 再びビルドして無事成功。[プロジェクトフォルダ]\Final_Release\CvGameCoreDLL.dll が目的のdllです。MODS\[MOD名]\Assets に置けばOK。 動作確認 CvUnit canMove() で常に true を返すようにしてみる。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (50%) できた CvGameCoreDLL.dll を My Documents\My Games\Beyond the Sword(J)\MODS\DllTest\Assets にコピーして civilization を起動、MOD DllTest をロード。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (50%) いくらでも移動できるようになりました。作成したdllが働いていることが分かります。
https://w.atwiki.jp/vst_prog/pages/63.html
VSTエフェクタ作成例 Tips VST Tipsトップページ(準備中) Effector Tipsトップページ 同一カテゴリのTips ディレイとは ディレイ用のバッファ(リングバッファ)について リングバッファの実装例 VSTディレイ作成 フィードバックの追加 その他 リンク 管理者へのメール テストページ ここを編集
https://w.atwiki.jp/vst_prog/pages/53.html
VSTエフェクタ作成例 Tips VST Tipsトップページ Effector Tipsトップページ その他 リンク 管理者へのメール テストページ ここを編集