WebService .Net usando Dll win32
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.
Abraço.
Quartieri
Curtidas 0
Respostas
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.
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
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.
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
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.
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
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
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
13/08/2007
Já tentei usar Marshall , mas o erro pertiste... :(
GOSTEI 0
Quartieri
13/08/2007
up
GOSTEI 0
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