VC6 DLL에서 WSTRING을 생성 할 때 잘못된 포인터 또는 링크 문제
-
19-09-2019 - |
문제
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을 다시 컴파일해야합니다. 여기에 설명하기에는 너무 기술적 인 반복자와 관련하여 다른 문제도 있습니다.
죄송합니다. 재건축해야합니다