したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

はじめまして。

9管理人:2011/05/21(土) 11:42:34
shunさん

ご質問ありがとうございます。簡単に回答させていただきます。

■1点目
 説明が面倒なので省略しておりましたが大体以下の内容です。

  DLLを利用する(呼び出す)側のプログラムでDLL内のクラスを利用するには、
  利用する側のプログラムでクラスを生成(new)しなければなりません。

  しかし、DLLファイルではクラスをエクスポートできない決まり(仕様)があります。
  つまり、利用する側のプログラムから直接、DLL内にあるクラスを生成(new)することが
  できないのです。

  そのため、苦肉の策としてDLL側にDLL内のクラスを生成する関数を用意しています。

  VSTではこのクラス生成のための関数がcreateEffectInstance()関数になります。

  【イメージ】
   NG:AudioEffect* vst = new MyMinimumVST(audioMaster);
     (↑呼び出す側で上記のようにnewで生成ができない。)

   OK:AudioEffect* vst = createEffectInstance();
     (↑苦肉の策としてDLLで用意された関数を利用してvstクラスを生成する。)

■2点目
 以下の理由でVSTではmain関数は必要ありません。

  main関数はC/C++ではエントリーポイントとして定義されています。

  エントリーポイントとは、「プログラムが始まるポイント(関数)」のことです。
  つまり、C/C++ではmain関数から始まるように決めて(定義して)います。

  エントリーポイントはコンパイラ(VC++)で変更することができます。

  DLLもプログラムなので、当然エントリーポイントがありますが、DLLの場合、
  DllMain関数になっています。
  (つまりDLLを作成するときはmain関数の代わりにDllMain関数をつかいます。)

  VSTもDLLの一種なのでDllMain関数から始まる必要があるのですが、
  すでにvstplugmain.cppファイルにDllMain関数の内容が記載されているため、
  自分でVSTを作成する際には記述する必要がありません。

■3点目
 データ型 float**ですが、「floatポインタへのポインタ」という意味です。
 「ポインタのポインタ」で調べていただくとわかりやすい説明があるかと
 思います。
 (ここでの説明はご勘弁ください。ポインタの説明だけでかなりのボリュームに
 なりますので…


上記1〜3の内容は、C/C++の知識に加え、Windowsプログラムについて
ご認識いただけると、より理解が深まるかと思います。

最後に有名なWebページですのでご存知かもしれませんが、
以下ページをご紹介させていただきます。

 猫でもわかるプログラミング
 http://homepage2.nifty.com/c_lang/


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板