2015-01-20 2 views
0

네이티브 코드를 사용해야하는 관리되는 C++/CLI 프로젝트가 있습니다. 기본 헤더 파일의 단순화 된 버전은 다음과 같습니다관리 코드에서 네이티브 함수 호출하기

struct structA 
{ 
    // Some variables... 
}; 
struct structB 
{ 
    // Some similar variables... 
    void convertTo(structA& dest); 
}; 

이 헤더는 관리 코드에 포함되어 있습니다. 관리되는 코드가 있습니다

structA sA; 
structB sB; 
// Load data into sB... 
sB.convertTo(sA); 

내가 비주얼 스튜디오 2008을 사용하고 /clr으로 관리되는 코드를 컴파일하고있다. 이것은 암시 적 호출 규칙이 다르므로 물론 링커 오류 (LNK2028)를 생성합니다. 그러나 나는이 문제를 해결하기 위해 extern "C" 선언을 사용할 수 없었습니다 (또는 아마도 그것들을 잘못 사용하고 있습니다). 나는 비슷한 질문에 제공된 몇 가지 해결책을 시도했지만 아무 소용이 없었다.

관리되는 코드에서 관리되지 않는 함수를 올바르게 호출하려면 어떻게해야합니까? 여기에 어떤 선언이나 래퍼가 필요합니까?

+0

실제로'/ clr'을 사용하여 컴파일 중입니다 ... – buzjwa

+0

죄송합니다. 오류 도움말 페이지에있는 것 같습니다. –

+0

.h 파일의 C 스타일 선언은'#pragma managed'와 같이 줄 바꿈되어야합니다. 컴파일러는 함수가 관리되는 코드가 아니라는 것을 알고 있습니다. 또는 함수 선언은 명시 적으로 호출 규칙을 지정해야하며, 항상 최선의 방법입니다. __stdcall 또는 __cdecl 특성을 사용하십시오. –

답변

1

이 사실은 관리되지 않는 충돌 문제가 아닙니다. 내가 관심을 지불 했어야 어떤 즉,

__declspec(dllexport) void convertTo(structA& dest); 

두 번째, 참조되지 않은 함수에 대한 일반적인 링커 오류 (LNK2019가)이었고, 수출 나는 단순히 사용하는 함수를 선언하는 것을 잊었다. 보다 전문화 된 오류이기 때문에 관리되지 않는 충돌 오류 (LNK2028)도 발생했습니다 (이상한 일이기도합니다). 지금까지 내가 아는 한,이 오류는 적용된 것일 뿐이므로 주석에서도 제안 된대로 /clr:pure을 사용했습니다.

관련 문제