1

私は Visual C++ の初心者なので、マネージ C++ プロジェクト (Visual Studio 2008) 内に 1 つ以上の関数を含むマネージ クラス モジュール (新しいクラス) を作成するにはどうすればよいですか? たとえば、ボタンが押された場合、クラスのメソッドをどのように呼び出すのでしょうか。それに関する非常に複雑なチュートリアルと、ほとんどのチュートリアルがアンマネージ コードまたは古いバージョンの Visual Studio に言及していることを理解できませんでした。Visual C++ マネージ プロジェクトに新しいクラス ファイルを追加する方法について適切なオプションが見つからなかったため、私自身の試みは完全に失敗し、エラーのみが生成されました。新しい「CLR コンポーネント クラス」を選択すると、コンポーネントが画面の右側のペインをいっぱいにしていることを知らせる警告メッセージが表示されます。新しい「CLR Windows フォーム クラス」を選択しても、何も起こらず、拡張子が「.class」のファイルはありません。追加されるか、新しく追加されたファイルがわかりません。プロジェクトの任意の場所から呼び出すことができる 1 つのパブリック関数を含む非常に基本的なクラス ファイルが必要です。

私はすでに非常に大きな main() cpp ファイル (main.cpp) を持っており、その中に多くの関数が含まれています。約千以上の機能があるため、検索やスクロールが難しくなります。ここで、これらの 1000 個の関数のいくつかを現在のプロジェクト内の 2 番目の cpp ファイルに入れたいと思います (Visual Basic 6 では単に「新しいモジュール」と呼ばれ、CSharp では「新しいクラス ファイル」と呼ばれていました)。問題は、たとえば、これらの関数を main.cpp から module1.cpp に移動すると、Visual C++ でこの関数を呼び出すことができないことです。

それは私が望んでいないものです:

  • DLL
  • 2番目のプロジェクト
  • 何かへの参照を追加する (プロジェクト/参照内)
  • 二重宣言

単純なクラスを作成し、このクラスの新しいオブジェクトを作成してそのメソッドを使用する方法があることを知っています。それが私が欲しいものです。これに関する Google の例は、Visual Studio の以前のバージョン用であり、私のバージョンと互換性がないため、うまくいきませんでした。この例から、私が何を望んでいるのかはわかりますが、それを Visual Studio 2008 に実装する知識はありません。

4

2 に答える 2

6

VS2008 WinForm プロジェクトにクラス ファイルを追加する方法について、段階的な手順を投稿するためにもう一度試みます。ここでも、リストを完成させるまで、番号付きの項目が常にきれいに機能するとは限らないことに気づきませんでした。数字の 1 つを除いてすべて修正できたので、これで問題ないはずです - David W

  1. これらの手順では、VS2008 の単純な開始プロジェクトを想定しています。このプロジェクトは、次の図に示すように、既定のフォームと 1 つのボタン コントロールを備えた WinForms アプリで構成されています。 デモプロジェクトの出発点。
  2. このプロジェクトに新しいクラスを追加するには、以下に示すように、[DemoWinFormApp] を右クリックして [追加] を選択し、[クラス...] を選択します。 クラスを追加する
  3. [クラスの追加] ダイアログの [名前] フィールドで、クラスに DemoNewClass という名前を付けて、[追加] ボタンをクリックします。 新しいクラス名を追加
  4. Visual Studio は、2 つのファイルをプロジェクトに追加します。定義用のヘッダー ファイルである DemoNewClass.h と、ヘッダーで定義された関数の実際の C++ 実装用の DemoNewClass.cpp です。ヘッダー ファイルが追加されると、Visual Studio エディターによってヘッダー ファイルがアクティブになりますが、次のように表示されます。 ヘッダー ファイルが追加された後のエディター メッセージ [ここをクリックしてコード ビューに切り替える] リンクをクリックして、ソース エディターを開きます。
  5. エディターに DemoNewClass.h ヘッダー ファイルのソースが表示されるようになりました。このファイルには、メイン アプリケーションである DemoWinFormApp からの名前空間の自動宣言が含まれており、"public:" 領域に 2 つの既定のコンストラクターも含まれていますが、これについては触れません。2 番目のコンストラクター定義の直後に、新しい public static メソッドを DemoNewClass に追加します。

  6. String をアスタリスクで囲む静的メソッド (ホスト クラスのインスタンス化を必要としないメソッド)を追加します。メソッドは「DecorateString」と呼ばれます

  7. 2 番目のコンストラクターの直後に、次に示すように宣言を追加し、青色で強調表示します。 新しい関数宣言

  8. 宣言が整ったら、実装を追加する必要があります。ソリューション エクスプローラーで、"DemoNewClass.cpp" をダブルクリックしてファイルを編集します。 実装ファイルの編集

  9. エディタ ウィンドウが開き、ファイルには 2 行しかありません。2 つのincludeディレクティブは、現在のソースの一部として参照ファイルを取り込むようにコンパイラに指示します。DemoNewClass.h で提供される宣言は、デフォルトで提供されます。

  10. 次に示すように、DecorateString メソッドの実装を .cpp ファイルに追加します。 ここに画像の説明を入力 これで、新しいクラスの定義、DecorateString 宣言、および DecorateString メソッドの実装の準備が完了します。あとは、WinForms アプリがメイン フォームからクラスとメソッドを参照できるようにするだけです。

  11. ソリューション エクスプローラーで、DemoWinFormApp プロジェクトの「ヘッダー ファイル」リストにある「Form1.h」ファイルをダブルクリックすると、エディターに Form1 が表示されます。(ボタンは既に追加されており、ボタンを追加する手順は読者に委ねられています): ここに画像の説明を入力

  12. 新しいクラス メソッドを示すために、ボタン クリックで、MessageBox クラスを介して DecorateString メソッドによって変更された文字列を表示します。まず、Form1.h ヘッダー ファイルの先頭にある新しいクラスのヘッダーに include ディレクティブを指定して、フォームに新しいクラスを認識させる必要があります。デザイナーでフォームを右クリックし、[コードの表示] をクリックしてソース エディターを表示します。 ここに画像の説明を入力

  13. クラスとそのメソッドをフォームで使用できるようにするには、Form1.cpp 実装ソース ファイルの先頭付近で、クラスのヘッダー DemoNewClass.h に インクルードディレクティブを指定する必要があります。インクルード ディレクティブ

  14. ソリューション エクスプローラーから、"Form1.h" をダブルクリックして、Form1 でフォーム デザイナーを開きます。または、ファイルがまだエディターで開いている場合は、「Form1.h [Design]」というラベルの付いたエディター タブをクリックして、デザイナーを開くことができます。

  15. フォームの「button1」ボタンに関連付けられたイベント ハンドラーから新しいクラス メソッドを呼び出します。Visual Studio は、デザイナーで "button1" をダブルクリックすることにより、既定のハンドラーを提供します。 ボタンクリックハンドラ

  16. 次のように、MessageBox::Show メソッドを呼び出すコードを入力し、DemoNewClass::DecorateString メソッドによって変更された文字列をパラメーターとして渡します。途中で Intellisense が新しいクラスをどのように認識しているかに注意してください。 ここに画像の説明を入力
  17. 完成したイベント ハンドラー/クラス メソッド呼び出しは次のとおりです。 完全なメソッド呼び出し
  18. Visual Studio の [ビルド] メニューから [ソリューションのビルド] を選択します (または F6 キーを押します)。これにより、ソリューションがコンパイルされ、検出された可能性のある構文エラーが明らかになります。提供されているサンプルは、問題なくコンパイルおよびビルドされます。

ビルド ソリューション...

ここに画像の説明を入力 20. ビルドが成功したら、あとはアプリケーションをテストするだけです。F5 キーを押してアプリケーションを実行し、テスト フォームを表示します。

ここに画像の説明を入力

  1. 「button1」をクリックしてハンドラーを実行し、装飾された文字列を確認します。

ここに画像の説明を入力

渡されたパラメーター「foo」は、新しいクラスの DecorateString メソッドに正常に渡され、表示のために MessageBox メソッドに返されました。これで、新しいクラス メソッドの宣言とフォーム参照が完了しました。

幸運を。

于 2012-08-27T05:40:32.653 に答える