Pergunta

Em uma compilação dll com Delphi 2006

Foo(aPath: widestring);
begin
  _rootPath := aPath;
end;

Em um executável construído com Delphi 2010

_Foo := GetProcAddress(FooModule,’Foo’);
_Foo(‘123456’);

Entrando no dll, aPath = '123'. Na verdade, qualquer seqüência de eu passar recebe corte exatamente no meio.

1.) Por que o meu ser literal metade? 2.) Como faço para corrigir isso?

Foi útil?

Solução

Certifique-se o parâmetro _foo é um WideString em 2010

Outras dicas

widestrings residem na pilha do Windows e não são gerenciados pelo gerenciador de memória Delphi. Então widestrings (ao contrário de outros tipos de longo string) pode ser compartilhado entre exe e dll sem problemas.

Eu suponho que você obter dados errados porque WideString é um tipo gerenciado eo gerenciador de memória para o DLL e o executável são diferentes. Se você pode recompilar o tipo dll make aPath ser PWideChar

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