C++/CLI .dll プロジェクトでネイティブ .dll プロジェクトの C++ クラスを使用しようとしています。Visual Studio 2010、.NET Framework 3.5。これまでのところ、これは私が持っているものです:
// This is a common macro:
#ifdef ISDLL
#define DLL __declspec(dllexport)
#else
#define DLL __declspec(dllimport)
#endif
NativeProject:
//INativeType.h:
class DLL INativeType {
public:
virtual void Foo() = 0;
};
//NativeType.h:
class DLL NativeType : public INativeType {
public:
virtual void Foo();
};
extern "C" DLL INativeType CreateNativeType();
//NativeType.cpp:
void NativeType::Foo() {}
extern "C" DLL INativeType* CreateNativeType() {
return new NativeType();
}
C++/CLI Project:
// Wrapper.h:
#include "INativeType.h"
ref class Wrapper {
INativeType* m_nativeType;
};
// Wrapper.cpp:
#include "Wrapper.h"
#include "NativeType.h"
// in some method:
m_nativeType = CreateNativeType();
これにより、次のリンカ エラーが発生します。
error LNK2028: unresolved token (...) "extern "C" class INativeType * __stdcall CreateNativeType(void)"" ... in Wrapper.obj
また、関数は NativeProject.dll に正しくエクスポートされていますが、DependencyWalker で確認したところ、リンカーは次の警告も表示します。
warning LNK4199: /DELAYLOAD:NativeProject.dll ignored; no imports found from NativeProject.dll
C++/CLI プロジェクトは、NativeProject.dll の読み込みを遅らせるように構成されており、リンカー オプションに NativeProject.lib も含まれています。現時点では、このリンカ エラーを診断する方法がわかりません。私は何を間違っていますか?