2012-01-09 11 views
1

C++/CLIプロジェクトで定義されたネイティブクラスのメソッドをエクスポートするにはどうすればよいですか?ここで私が持っているものです。C++/CLIプロジェクトからネイティブタイプをエクスポート

.hファイル:

#pragma once 

#ifdef COMPILE_PRODUCER_LIB 
    #define PRODUCER_LIB_EXPORT __declspec(dllexport) 
#else 
    #define PRODUCER_LIB_EXPORT __declspec(dllimport) 
#endif 

public class PRODUCER_LIB_EXPORT MySecondNativeClass { 
public: 
    MySecondNativeClass(int val); 

    int getValue() const; 

private: 
    int m_value; 
}; 

が.cppファイル:

#include "stdafx.h" 
#include "MySecondNativeClass.h" 

MySecondNativeClass::MySecondNativeClass(int val) { 
    this->m_value = val; 
} 

int MySecondNativeClass::getValue() const { 
    return this->m_value; 
} 

このクラスを使用して、同じプロジェクト内では正常に動作しますが、別の(Cでそれを使用する++/CLI)プロジェクトは私に "解決されていない外部シンボル"リンカエラーを与えます。 (COMPILE_PRODUCER_LIBは、クラスを含むプロジェクトでのみ定義されたプリプロセッサの定義である。)問題(this pageの最後でダウンロード)を示し、私は(のVisual Studio 2010用)小型のソリューションを作成しました

。そこで、ネイティブクラスMySecondNativeClassはプロジェクト "ManagedProviderLib"で定義されており、 "ExternalTestClass.cpp"(プロジェクト "ManagedExternalLib")で使用されています。

+0

C++/CLIプロジェクトで定義されたネイティブクラスのメソッドをWHEREにエクスポートしますか?別のC++/Cliプロジェクト? C#プロジェクト?またはネイティブDLL。 –

+0

申し訳ありませんが、十分に明確ではありません。それらをエクスポートして、別のC++/CLIプロジェクトで使用できるようにします。 –

+0

少なくとも1つの "解決されていない外部シンボル"リンカーエラーまたは2つの全体を投稿できますか? –

答えて

4

DLLプロジェクトは、DLLのインポートライブラリであるビルドディレクトリに.libファイルを作成します。 .libファイルを他のプロジェクトで指定する必要があります。リンカー+入力、追加の依存関係の設定。

参照の追加が機能しないことに注意してください。アセンブリのメタデータには、クラスの定義のみが含まれています。あなたのクラスはネイティブC++であり、管理されていません。また、.cppファイルが/ clrなしでコンパイルされていることを確認してください。 C++/CLIコンパイラはネイティブのC++クラスをILにうれしく翻訳しますが、あまり効率的ではありません。 #pragma managedでソースコードファイル内でこれを制御できます。

+0

正しい答えではありませんが、あなたの答えは正しいヒントです。 "参照の追加"は、ネイティブ(管理されていない)DLLファイルと管理されたDLLファイル(少なくともVisual Studio 2010では)で動作します。また、問題なく/ clrを使ってプロジェクト全体をコンパイルすることもできます。唯一のことは、 "Add Reference"を "Linker - > Input"として使用する必要があることでした。 –

+0

ブリリアント!私のマネージ+管理されていないDLLはすべてのクラス(C++のものを含む)をエクスポートしていたので、その理由を理解できませんでした。 THNX! –

関連する問題