WebService .Net usando Dll win32

Delphi

13/08/2007

Olá colegas, estou com o seguinte problema, tenho uma dll win32 (fiz em Delphi) que gera todos os Sqls dos sistemas aqui da empresa, com aplicativos .exe ela funciona ok, mas estou tentando usa-la agora para gerar os SQls de um webservice .Net , chamo a dll com [DllImport...], quando faço o webservice .net puxar um metodo simples da dll tudo funciona ok, mas tenho metodos na dll que leem um arquivo .ini e leem um XML, estes metodos não retornam nada, seráalgo com o espaço de memória da dll? alguma sugestão?


Abraço.


Quartieri

Quartieri

Curtidas 0

Respostas

Ecq

Ecq

13/08/2007

Ola amigo, acho que estou com o mesmo problema. Quem achar a solução primeiro mando pro outro, pode ser?


Olha só, estou fazendo um webservice para uma empresa mas estou com um problema.

Podes me ajudar?



É o seguinte, criei um WS para acessar uma DLL para fornecer as funções da DLL na web.

Esta DLL faz tratamento de dados, por exemplo: padroniza nomes, endereços, ceps, cargos, etc.

Ela lê um banco local para fazer o tratamento dos dados.



Mas estou com problema no seguinte, por ex, na função ScrubberCargo. Esta recebe dois parâmetros, um string que é o nome do cargo e outro o tamanho padrão.

Se eu passar “Gerente de Produção“ a função deveria retornar “Ger. Produção” mas ela retorna a mesma coisa passada. Na verdade não é o retorno é um parâmetro passado como referencia (em c# ref).



Tens alguma experiência com isto?



Já fiz varias coisas e não dá certo. Já utilizei Ansi e Unicode na DLLImport do .Net. Já utilizei código unSafe (char * nmCargo) também. Não sei mais o que fazer.





Grato



Eder.


GOSTEI 0
Quartieri

Quartieri

13/08/2007

seu eu conseguir resolver posto aqui pra agente, mas ta dificil, se o massuda pudesse aparecer aqui.....rs :)

vou detalhar mais meu problema:

minha função principal na dll lê um XML com a informação sobre minhas tabelas no banco e monta os SQLs se baseando neste xml, estou usando o CoInitialise antes de criar o meu TxmlDocument, no .exe de teste tudo funciona que é uma maravilha, mas no webservice não funciona.....Agradeço a ajuda.


Abraço.


GOSTEI 0
Ecq

Ecq

13/08/2007

Na verdade a chamada é no próprio browser, não tenho nenhum cliente consumindo o WS ainda.



Este é código no web service



[DllImport(´scrubber.dll´)]

public static extern int ScrubberCargo(ref string sCargo, int nTamanho);



//padronização de cargo

[WebMethod]

public int wScrubberCargo( string sCargo, int nTamanho)

{

string retCargo = sCargo;

try

{

return ScrubberCargo(ref retCargo, nTamanho);



/*Aqui o retCargo que recebe por exemplo “Gerente de Produção” deve retornar “Ger Producão” mas isto não ocorre*/



}

catch (Exception ex)

{

GravaLog(ex.ToString());

return 0;

}

}



Ficou mais claro.





Grato



Eder.


GOSTEI 0
Ecq

Ecq

13/08/2007

Será que você não está tendo problemas na conversão de tipos?

Experimenta trabalhar com Marshal para converter um tipo Managed para unManaged.



Tipo:

public static extern int ScrubberCargo([MarshalAs(UnmanagedType.LPStr)] string sCargo, int nTamanho);



Att,

Alex


GOSTEI 0
Quartieri

Quartieri

13/08/2007

Já tentei usar Marshall , mas o erro pertiste... :(


GOSTEI 0
Quartieri

Quartieri

13/08/2007

up


GOSTEI 0
Quartieri

Quartieri

13/08/2007

Não foi de um jeito foi de outro, retirei as funções da dll e coloquei tudo num webservice .net, fiz algumas modificações necessarias e tudo está funcionando ok.


GOSTEI 0
POSTAR