Desde o lançamento do Magic xpa 1.8 (em Junho/2009), com o advento do client RIA para Windows .NET, e posteriormente do Magic xpa 2.o (em Julho/2011) e o advento do Deployment Engine (runTime) para Windows. NET, uma dúvida tem surgido aos desenvolvedores:
Como ficam as DLLs Win32, já que a execução agora é em .NET?
DLLs têm sido utilizadas para muitas finalidades nas aplicações, como interação com equipamentos (ex: impressoras fiscais) e exploração de recursos do sistema operacional (ex: fazer um print screen).
A boa notícia é: a função CALLDLL() continua mantida (suportada) no produto.
Continua sendo possível invocar as DLLs normalmente nas novas versões do Magic xpa.
(NOTA: a função WinHWND() mudou a partir do Magic xpa 2.0. Consulte mais sobre isso no DevNET).
Contudo, comportamentos diferentes ocorrerão quando a solução for do tipo RIA.
Isso porque a função CALLDLL() é Server Side, ou seja, ele só executa em tarefas batch (do lado do servidor).
Mas há uma outra boa notícia: resolver isso também é fácil.
Existem duas maneiras:
P/Invoke
Todo código .NET pode invocar uma DLL Win32, através de uma técnica denominada P/Invoke.
Logo, se colocarmos a chamada para DLL dentro de uma instrução Invoke .NET, ela será executada do lado client, tal qual ocorre com as aplicações Desktop/OpenClient:
Código .NET
Outra forma, é substituir as chamadas às DLLs por código .NET (C# ou VB.NET) equivalente, que executem as mesmas tarefas:
Temos inclusive publicado, em posts anteriores, exemplos de como o recurso de codificação nativa em .NET pode trazer muitos benefícios para a aplicação/solução final.
Tudo que é codificado através de um Invoke .NET, executará tanto do lado Server (tarefas batch), quanto do lado Client (tarefas OnLine e RIA).
Neste link você pode baixar um pequeno projeto exemplo (em Magic xpa 2.0a), onde é possível executar um print screen usando código .NET e executar um document print, tanto com P/Invoke quanto com CALLDLL().
Manoel Frederico Silva
Product Manager & MAGIC Evangelist / Magic Software Brasil