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

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top