Ponteiro ruim ou problema de link ao criar o WSTRING da DLL VC6
-
19-09-2019 - |
Pergunta
Eu recebi uma DLL gerada no VC6 e usando wstring
, e estou tentando usá -lo em um projeto VC9. Nesta DLL, há uma classe de nível superior manipulando wstring
, chamado UtfString
.
Eu tenho tudo importado corretamente no meu projeto, mas quando ligo:
std::wstring test;
UtfString uTest(test);
Não vai vincular, mesmo que o protótipo de função esteja na lib ...
O outro emissor é que, quando crie um novo UTFString e depra meu aplicativo, o novo ponteiro é <Bad Ptr>
.
Eu suspeito que um conflito entre VC6 wstring
e VC9 wstring
mas eu não tenho certeza. Quero evitar modificar a DLL original.
Seria ótimo se alguém pudesse deixar as coisas mais claras para mim e me explicar qual é a verdadeira razão do problema.
Agradecemos antecipadamente pela sua resposta, Boris
Solução
Nem tente
Os layouts da string são diferentes
Você não pode fazer isso.
A classe String é totalmente diferente entre VC6 e VC9.
Mesmo se você foi capaz de vincular, provavelmente falhará.
Nas cordas VC9, possui uma união que é de 16 bytes para pequenas cordas e um ponteiro para o tamanho da corda ()> 15. No VC9, o WSTRINGS possui uma união que é de 8 wchar para strings pequenas e um ponteiro para string s size ()> 7.
No VC6, todo o espaço do buffer de string é alocado na pilha.
Você deve recompilar a DLL se passar as cordas pelo limite. Também existem outras questões em relação aos iteradores que são técnicos demais para serem descritos aqui.
Desculpe, tenho que reconstruir