로 마이그레이션 한 후 내가 (다른 사람들)를 포함하는 VS2010 솔루션을 가지고, 다음 프로젝트 :LNK 2022 : 일관성 레이아웃 정보, VS2010
- Native.DLL (네이티브 C++ 프로젝트 정적으로 타사에 대한 링크
using namespace std; bool Native::CalcSomething(double* result, string& errorMsg);
- : STL)
의사 코드 (매우 단순화)을 포함 LIB, ITK, (아주 간단)
의사 코드
bool Wrapper::WrappedCalcSomething([System::Runtime::InteropServices::OutAttribute] double[] result,[System::Runtime::InteropServices::OutAttribute] System::String^ errorMsg)
{
Native* ntv = new Native();
std:string error;
pin_ptr<double> resultPtr = &result[0];
bool success = ntv->CalcSomething(resultPtr, error);
errorMsg = gcnew System::String(error.c_str());
return success;
}
이을 :합니다 (Native.DLL에 대한 호출에서 문자열을 동적으로 Native.DLL에 연결하고 표준을 사용하여 C++/CLI 프로젝트) Wrapper.DLL 나는이 문제에 대한 찾을 수있는 거의 모든 스레드를 읽고 및 시도
2> Generating Code...
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.logic_error): (0x02000049).
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.domain_error): (0x0200004a).
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.invalid_argument): (0x0200004b).
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.length_error): (0x0200004c).
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.out_of_range): (0x0200004d).
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.runtime_error): (0x0200004e).
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.overflow_error): (0x02000050).
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.underflow_error): (0x02000051).
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std.range_error): (0x02000052).
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._Locinfo): (0x02000054).
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (_Locimp): (0x02000059).
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (failure): (0x02000068).
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._String_val<char,std::allocator<char> >): (0x02000097).
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (std._String_val<wchar_t,std::allocator<wchar_t> >): (0x02000099).
2>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (8013118D) : Inconsistent layout information in duplicated types (lconv): (0x020000ce).
2>LINK : fatal error LNK1255: link failed because of metadata errors
: 컴파일과 VS2008 (64)에 완벽하게 연결되어 있지만 (여러 가지 이유로) VS2010로 마이그레이션 한 후, 링커는 다음과 같은 오류를 제공합니다 :
- 깨끗하고
- Move the headers around 재 -이 WINDOWS.H에 대한 참조가없는 나는 (이 모든 파일 될 일이 Wrapper.DLL에 아무런 영향을 미치지
- Using the /clr flag only on the files that need it에 주위의 #include 라인을 이동 시도 프로젝트에서). 문제는 Wrapper.DLL에 의해 호출되어야하는 Native.DLL의 public 메서드가 서명에 std : string 매개 변수를 포함한다는 것입니다. 이로 인해 STL 참조를/clr 컴파일 범위에서 분리하는 것이 어려워 짐
- /MDd (및/MD 시도)이있는 (모든 항목이 ITK, 타사 lib 포함)을 컴파일 중입니다.이 설정을 변경합니다 유일한 "솔루션"내가 생각할 수있는 /Zp에 또는 프라 그마 팩 어디
을 사용하고 내가 볼 수없는
참고 : 나는이 문제를 "디버그하는"방법 (link)에 대해 알고 있지만 실수하지 않는 한 문제의 원인이 std : string이라는 것을 알고 있다고 생각합니다.
'wrapper.dll'도 재구성 했습니까? – SomeWittyUsername
예, 새로운 "수정"을 시도 할 때마다 기본 프로젝트와 래퍼 프로젝트를 다시 빌드합니다. – Kohanz
프로젝트를 어떻게 이전 했습니까? VS2008에서 자동으로 변환 되었습니까? – SomeWittyUsername