2012-11-20 2 views
3

VS2010으로 작성된 dll (DLL A)에 MFC 및 VS2010으로 작성된 다른 dll을 사용합니다. VS2008로 빌드되고 VS2008로 다시 빌드 된 응용 프로그램에서 실행되는 다른 DLL (DLL B)이 있습니다. DLL A (# import 지시문 사용하여 DLLB 가져오고 com 개체를 만듭니다. 객체 생성은 성공하지만 어플리 케이션이 어딘가에 충돌합니다. 컨트롤을 표시 할 때 충돌이 발생한다고 생각합니다 (이는 단지 가정 사항입니다). 것은 응용 프로그램의 소스가 없습니다. DLL A는 해당 응용 프로그램의 플러그입니다. 그런 혼합을 할 때 고려해야 할 사항이 있습니까? 전혀 가능합니까?VS2008을 사용하여 dll을 사용할 수 있습니까? VS2010을 사용하여 dll을 사용할 수 있습니까?

답변

1

그렇습니다. C 링크를 사용하는 경우 코드를 DLL 경계에서 호출하는 것이 좋습니다. DLL 경계가 char * 및 int와 같은 기본 C 유형을 사용하는 경우 DLL 경계를 넘어 C++ 참조/포인터를 전달하는 경우에는 실제로 동일한 컴파일러 플래그와 동일한 컴파일러로 양쪽을 빌드해야합니다. VS2010 컴파일러가 VS2008 컴파일러와 완전히 같은 방식으로 클래스 객체에 대한 메모리를 레이아웃한다는 보장은 없습니다. 동일한 바이트 정렬 플래그를 사용하는 경우 레이아웃은 거의 동일하지만 보증 할 수는 없습니다 .

+0

DLL A에서 가져 오거나 내보내는 모든 매개 변수는 DLL A에 노출 된 com 개체입니다. –

+0

이 경우에는 COM을 사용하기 때문에 dll 경계의 각면이 다른 컴파일러를 사용해서는 안됩니다 . – Dughall

관련 문제