3

Visual C ++ 2008でDLLを作成する場合、いくつかの選択肢があります。「クラスライブラリ」を作成できます。これにより、C ++のCLI(マネージ)拡張を使用する.Netライブラリが実際に提供されることを理解しています。

それは望ましくなく、別のVisual C ++ Windows実行可能プロジェクトにリンクするには静的な.LIBファイルが必要であると想定したため、代わりに「Win32プロジェクト」を選択し、[アプリケーション設定]パネルでC ++(MFCなし)を指定します。 )DLL。

これにより、 「DLLアプリケーション用にエクスポートされた関数」を定義する場所となる.cppファイルを使用してプロジェクトが作成されます。

これも私が望んでいることではないようです。基本的に、私が探しているのは、C#.NETではクラスライブラリアセンブリであるものと同等のネイティブC++です。いくつかのクラスをDLLにパッケージ化してから、.EXEプロジェクトにDLLプロジェクトヘッダーファイルをインクルードしてDLLのクラスを使用させ、.LIBとリンクして参照を解決したいと思います。

これを行う通常の方法は何ですか?

4

4 に答える 4

4

あなたはそれを正しくやっています。必要なのは、クラスを__declspec(dllexport)でマークして、プロジェクトの外部から利用できるようにすることです。プロジェクトをビルドすると、.DLLと.LIBの両方が生成されます。

于 2009-07-30T18:09:04.353 に答える
1
  • 新しいプロジェクトを作成する
  • Visual C ++:Win32:Win32プロジェクト
  • アプリケーション設定でDLLを選択し、[シンボルのエクスポート]をオンにします

プロジェクトを生成すると、エクスポートされたクラス(通常はC {MyLib})がスタブされます。

于 2009-07-30T18:11:25.377 に答える
1

あなたはC++(MFCなし)DLLを作成する権利があります。クラスを作成すると、定義したエントリポイントがそのDLLからエクスポートされ、他のC ++コード(たとえば、C ++で記述されたWin32アプリケーション)で使用できるようになります。

C ++の名前は、コンパイラによって自動的に奇妙で素晴らしい値に変更されるため、DLLのクライアントがたとえばCプログラムであるかのように、そのままエクスポートすることは実用的ではありません。しかし、すべてがC ++である場合は、問題ないはずです。

一部のクラスを作成する場合は、それらを動的に(DLLとして)リンクすることを選択できますが、DLLのシンボル定義を含むインポートライブラリ(自動的に作成される)が必要になります。アプリケーションからコードに静的にリンクすることもできます。この場合、DLLのシンボルではなく、クラスの実際のオブジェクトコードを含む静的ライブラリ(.LIBも)になります。

もちろん、DLLの利点は、ライブラリを使用して複数のアプリケーションを作成する場合、それらすべてがDLLを共有できることです。静的ライブラリを使用すると、それぞれにライブラリコードのコピーが含まれます。

于 2009-07-30T18:11:33.660 に答える
1

この記事はあなたがやろうとしていることを説明していると思います:http: //www.codeproject.com/KB/mcpp/usingcppdll.aspx

個人的には、(C ++ではなく)C関数をエクスポートすることも好みます。この場合、コンパイラ固有のメソッド名の装飾やコンパイラで生成された関数の公開を気にする必要がないように、このポインタを明示的にします。

于 2009-07-30T18:13:22.627 に答える