Eu posso te dar milhares! :-)
Mas só conseguiria te dar uma que fosse *relevante* se tivesse um pouco mais de informações... tipo, a sua aplicação faz basicamente o que? Trabalha com floats, doubles, etc? você já tentou reproduzir com/sem otimizações? Qual dos dois resultados é o esperado? Imagino que isso é um bug em algum dos dois, certo? ...etc...
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
On 14/05/2013 16:28, Tiago Alves wrote:
> Pessoal,
>
> estou com uma situação estranha aqui. O cenário é o seguinte.
>
> Nós temos uma DLL aqui, compilada com o VS2010, essa DLL exporta uma
> função que processa recebe (char* A, char* B, float* resultado).
> Esse projeto do VS gera a DLL e o .lib, como de costume.
>
> Temos então uma aplicação de teste, que carrega dois arquivos binários
> e copia para A e B respectivamente.
> Quando a aplicação de teste é compilada também no VS2010 e utilizo o
> .lib para ter acesso às funções da DLL, o resultado o float resultado
> recebe um valor de 621.359253.
> No entanto, quando eu compilo a mesma aplicação de teste no Cygwin,
> faço a linkagem com o .lib para ter acesso à DLL, eu tenho um float
> resultado de 640.776672.
>
> Obs: Eu processei vários outros arquivos A e B na aplicação de teste,
> e o resultado foi idêntico tanto quanto eu compilo no VS como no
> Cygwin, no entanto, dois arquivos específicos estão dando essa diferença.
>
>
> Alguém tem alguma explicação sobre isso?
>
>
Você está inicializando *resultado antes (caso faça) a leitura (ou soma,
incremento) desse ponteiro?
Adriano
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
On 14/05/2013 16:36, Tiago Alves wrote:
> *resultado está sendo inicializado, mas de qualquer forma ele é apenas
> saída. A função da DLL no final faz uma atribuição a ele.E o que é A e B? São strings null-terminated, e caso sejam, você está
>
verificando se nois dois casos elas estão terminadas corretamente?
E se não forem, como você decide até onde ler estes ponteiros?
Adriano
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
On 14/05/2013 16:43, Tiago Alves wrote:
> Adriano,
>
> esses A e B são dados serializados de acordo com um padrão. Um byte
> específico desse arquivo indica o tamanho do todo, com isso, é
> possível saber até onde ler.
>
Ok. Verifica também se o arquivo que dá problema tem uma seqüência \r\n
enquanto os outros não.
Se é a aplicação cliente que carrega os arquivos, o código com Cygwin
pode tratar isso de maneira diferente do Windows.
Mas como o outro colega falou, debugando a DLL e vendo onde ocorre a
primeira diferença seria a melhor maneira de descobrir o que está
acontecendo.
Adriano
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
A versao dos compiladores sao compativeis? (ambos 64 bits, por exemplo)
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
só melhorando uma informação aqui, que com certeza faz diferença. Quando eu disse que a aplicação compilada com VS dava um retorno de 621.359253, na verdade, esse valor é 0,621359253 e o compilado no Cygwin é 0,640776672.Eu esqueci de comentar que multiplicamos por 1000 o valor retornado pela DLL.
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
On Wednesday 15 May 2013 11:09:29 P. wrote:
> O foco desta análise está no número final, e a sensação de absurdo me parece
> correta: para a mesma entrada e a mesma DLL (e a mesma configuração no
> ambiente de ligação dinâmica, dependências etc.) a saída deve ser a mesma.
Não será só o caso dos dois resultados estarem entrelaçados? E só na hora que se imprime o resultado, é que ele resolve para um valor ou outro?
Tiago,
Você esta usando x86, x86-64 ou um computador quântico?
nós temos o seguinte:1) A DLL recebe A e B, e uma classe deserializa esses dados, gerando um vector<Ponto>, onde Ponto é uma struct que armazena short X, short Y e double Alfa.2) Após a deserialização, a função que realmente faz as contas, recebe esses dois vectors. Nós escrevemos em disco os conjuntos de valores X,Y e Alfa para os dois casos e eles são idênticos.
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en
@Gianni:SO: 64 bitsAplicação: 32bits@P.Nós utilizamos printf, cout e fprintf para imprimir os resultados. Será que pode ser questão de I/O?