문제

VC6에서 DLL을 생성하고 사용했습니다 wstring, 그리고 저는 VC9 프로젝트에서 사용하려고합니다. 이 DLL에는 더 높은 수준의 클래스 조작이 있습니다. wstring, 라고 불리는 UtfString.

프로젝트에서 모든 것을 올바르게 가져 왔지만 전화 할 때 다음과 같습니다.

std::wstring test;
UtfString uTest(test);

함수 프로토 타입이 LIB에 있더라도 링크되지 않습니다 ...

다른 발행자는 새로운 UTFString을 만들고 내 앱을 디버깅 할 때 새로운 포인터는 <Bad Ptr>.

VC6 간의 충돌이 의심됩니다 wstring 및 VC9 wstring 그러나 나는 확실하지 않다. 원래 DLL을 수정하는 것을 피하고 싶습니다.

누군가가 나를 더 명확하게 만들고 문제의 진짜 이유가 무엇인지 설명한다면 좋을 것입니다.

귀하의 답변에 미리 감사드립니다, Boris

도움이 되었습니까?

해결책

시도조차하지 마십시오

문자열 레이아웃이 다릅니다

당신은 그렇게 할 수 없습니다.

문자열 클래스는 VC6과 VC9간에 완전히 다릅니다.

연결할 수 있더라도 충돌이 발생할 가능성이 높습니다.

VC9 현에는 작은 문자열의 경우 16 바이트 버퍼와 String st size ()> 15의 포인터 인 Union이 있습니다. VC9 WSTRING에는 작은 문자열 용 8 WCHAR 버퍼 및 String ST Size ()> 7 용 포인터 인 Union이 있습니다.

VC6에서 모든 스트링 버퍼 공간은 힙에 할당됩니다.

경계를 가로 질러 줄을 통과하면 DLL을 다시 컴파일해야합니다. 여기에 설명하기에는 너무 기술적 인 반복자와 관련하여 다른 문제도 있습니다.

죄송합니다. 재건축해야합니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top