2009-07-30 1 views
3

Visual C++ 2008でDLLを作成する場合、いくつかの選択肢があります。 "クラスライブラリ"を作成することができますが、これは実際にはC++のCLI(管理対象)エクステンションを使用する.Netライブラリを提供します。Visual C++ DLLからアンマネージクラスをエクスポートしますか?

私は静的な.LIBファイルを別のVisual C++のWindows実行可能プロジェクトにリンクする必要があると仮定したので、代わりに "Win32 Project"を選択し、アプリケーション設定パネルでa C++(MFCなし)DLL。

これは、「DLLアプリケーションのエクスポート関数」を定義する場所となる.cppファイルを含むプロジェクトを作成します。

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

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

答えて

4

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

+0

素晴らしい。そして、インポートする反対側の同様のアプローチ? – Buggieboy

+0

自動生成されたコードが何をするかを見てみましょう。実際には、プリコンパイラ・ディレクティブに基づいてdllexport/importをマクロ化するため、コンシューマはインポートとエクスポートについて考える必要はありません。 – ctacke

+0

ctackeが何を話しているかについての私の答えを見てください(http://stackoverflow.com/questions/1179103/visual-studio-2005-linker-problem/1179118#1179118) –

1
  • のVisual C++の新しいプロジェクトを作成Win32プロジェクト
  • アプリケーション設定の選択DLLをし、「エクスポートシンボル」

をチェックするプロジェクトを生成すると、それが出てスタブます通常はC {MyLib}という名前のエクスポートされたクラスです。

1

あなたはC++(MFCなし)DLLを作成することができます。クラスを作成し、定義したエントリポイントをそのDLからエクスポートします他のC++コード(例えば、C++で書かれたWin32アプリケーション)で使用するためのLです。

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

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

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

1

私はこの記事があなたがやろうとしているかを説明思う: 私も、私は特定のコンパイラを気にすることを避けるために明示的にこのポインタ作る(C++ではなく)C関数をエクスポートすることを好む個人的にhttp://www.codeproject.com/KB/mcpp/usingcppdll.aspx

メソッド名の装飾とコンパイラ生成関数の公開

関連する問題