Visual Studio 2008 で受け取ったリンカ エラーを回避するために多くの調査を行いました。コードは VS2010 でも正常に動作しますが、VS2008 でも動作する必要があります。
プロジェクトのビルド時に、リンカから次の出力が得られます。
error LNK2028: unresolved token (0A000459) "void __cdecl __ExceptionPtrCopy(void *,void const *)" (?__ExceptionPtrCopy@@$$FYAXPAXPBX@Z) referenced in function "public: __thiscall std::_Exception_ptr::_Exception_ptr(class std::_Exception_ptr const &)" (??0_Exception_ptr@std@@$$FQAE@ABV01@@Z)
error LNK2019: unresolved external symbol "void __cdecl __ExceptionPtrCopy(void *,void const *)" (?__ExceptionPtrCopy@@$$FYAXPAXPBX@Z) referenced in function "public: __thiscall std::_Exception_ptr::_Exception_ptr(class std::_Exception_ptr const &)" (??0_Exception_ptr@std@@$$FQAE@ABV01@@Z)
error LNK1120: 2 unresolved externals
c++ から c++/cli に通信したいときにエラーが発生すると思います。管理オブジェクトへの参照を保持する管理クラスがあります。
ManagedWrapper.h:
class ManagedObjectWrapperPrivate
{
public:
msclr::auto_gcroot<ManagedObject^> obj;
}
public class ManagedWrapper
{
...
private:
ManagedObjectWrapperPrivate *objWrapper;
}
次に、オブジェクトとオブジェクト ラッパーがコンストラクターで初期化されます。ただし、ネイティブ C++ コードがマネージド オブジェクトを認識しないようにするために、次のように (NativeWrapper.h で) 再宣言します。
class ManagedObjectWrapperPrivate;
したがって、ネイティブ クラスは、ManagedObjectWrapperPrivate が保持するマネージド オブジェクトを認識しません。
これは VS 2010 では正常に動作しますが、VS2008 では動作しないようです
必要に応じて、さらに情報を提供させていただきます。