Jump to content

Recommended Posts

Objetivo:
Mostrar como é simples construir uma DLL em C# para trabalhar com o AutoIt.

Vantagens:

  • Visto que há uma relativa facilidade de descompilar um executável do AutoIt, e ter acesso ao código fonte, você pode escrever partes chaves do seu código em uma DLL, protegendo esta parte do código dentro de uma DLL, que não é tão facilmente descompilável.

Programas utilizados:

  • AutoIt (versão 3.3.14.2)
  • SharpDevelop (versão Frameworks 2.0 to 4.5.1)

Autor..........: Luigi

Tutorial sobre C#
https://www.tutorialspoint.com/csharp/index.htm

No Windows Explorer, na unidade C: crie um diretório chamado DllCSharp.

No SharpDevelop, execute: FILE > NEW > SOLUTION

Crie um projeto C# > CLASS LIBRARY
New Project
Categories.....: C#
Templates......: Class Library
Name...........: homework
Location.......: C:\DllCSharp
Solution Name..: homework

tjDdKF.png

Na classe MyClass.cs, cole o seguinte conteúdo:



/*
 * Created by SharpDevelop.
 * User: Luigi
 * Date: 02/12/2016
 * Time: 17:13
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;

namespace homework{
	public class MyClass{
		public string Nome = "HomeWork";
                public public object[] array;
		
		public string MudarNome{
			get{
				return Nome;
			}
			set{
				Nome = value;
			}
		}
		
		public string Ola(){
			return "Olá " + Nome;
		}

		public void SetArray(object[] arr){
			array = arr;
		}

		public object GetArray(int index){
			return array[index];
		}
	}

		public double tempo_gasto(){
			Stopwatch sw = new Stopwatch();
			sw.Start();
			int [,] arr = new int[3000,20];
			for( int ii = 0 ; ii < 3000 ; ii++ ){
				for( int jj = 0 ; jj < 20 ; jj++ ){
					arr[ ii , jj ] = 1;
				}
			}
			sw.Stop();

			var tempo = sw.Elapsed.TotalMilliseconds;
			return tempo;
		}
}




Procure o arquivo AssemblyInfo.cs e altere a configuração:
De:
[assembly: ComVisible(false)]
Para:
[assembly: ComVisible(true)]

Aperte F8 para compilar.

No diretório C:\DllCSharp\homework\homework\bin\Debug, você terá o arquivo homework.dll

Crie um script no AutoIt, com o seguinte conteúdo:

;~ https://www.tutorialspoint.com/csharp/csharp_events.htm/

#include <Array.au3>
;Autor...: Luigi
#include <WinAPIShellEx.au3>

Global $sPath = "C:\DllCSharp\homework\homework\bin\Debug\homework.dll"

Local $RegAsm = "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe"

RunWait($RegAsm & " /register /codebase /tlb " & $sPath, @ScriptDir, @SW_HIDE)

Local $oHomework = ObjCreate("homework.MyClass")
If IsObj($oHomework) Then
	; imprime o conteúdo da propriedade 'Nome'
	ConsoleWrite("1[ " & $oHomework.Nome & " ]" & @LF)
	; executa o método 'Ola'
	ConsoleWrite("2[ " & $oHomework.Ola & " ]" & @LF)

	; atribui o valor 'Luigi' à propriedade 'Nome'
	$oHomework.MudarNome = "Luigi"
	; executa o método 'Ola'
	ConsoleWrite("3[ " & $oHomework.Ola & " ]" & @LF)

	Local $arr[2] = [123, 456]
	$oHomework.SetArray($arr)

	Local $get = $oHomework.GetArray()
	ConsoleWrite($get[0] & @LF)
	ConsoleWrite($get[1] & @LF)

	ConsoleWrite("Tempo gasto[" & $oHomework.tempo_gasto & "]" & @LF)
; veja este post: http://forum.autoitbrasil.com/index.php?/topic/2068-codigo-da-depressao-desempenho/?p=13459
	RunWait($RegAsm & " /unregister " & $sPath, @ScriptDir, @SW_HIDE)
Else
	ConsoleWrite("ocorreu um erro..." & @LF)
EndIf

Resultado no console do AutoIt:

--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
1[ HomeWork ]
2[ Olá HomeWork ]
3[ Olá Luigi ]
+>17:13:32 AutoIt3.exe ended.rc:0

Pronto!

=Erro============================================================================
================================================================================
================================================================================
Build started.
Warning MSB3270: Houve uma incompatibilidade entre a arquitetura de processador do projeto em criação "MSIL" e a arquitetura de processador da referência "C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll", "x86". Essa incompatibilidade poderá causar falhas de tempo de execução. Considere a alteração da arquitetura de processador de destino de seu projeto por meio do Gerenciador de Configuração de forma a alinhar as arquiteturas de processador entre seu projeto e as referências ou obtenha uma dependência sobre referências com uma arquitetura de processador que corresponda à arquitetura de processador de destino de seu projeto.
Compiling homework
Build finished successfully. (00:00:00.5780307)
=Correção========================================================================
Solution [NomeDoProjeto]
[NomeDoProjeto]
Compiling
Advanced
TargetCPU: 32-bit Intel-compatible processor
Salvar recompilar
================================================================================
================================================================================
================================================================================

Um arquivo .dll é seguro?
https://stackoverflow.com/questions/18050615/how-to-open-dll-files-to-see-what-is-written-inside

Edited by Luigi
  • Like 3

Share this post


Link to post
Share on other sites

Muito obrigado por compartilhar, estava esperando por esse tutorial, bem simples mesmo agora depois de ver o exemplo pronto, confesso que já tinha tentado isso sem sucesso, tentando exportar as funções, mas dessa maneira ficou muito melhor, isso vai ser uma mão na roda pra trabalhar com Autoit.

 

Logo postaremos as dúvidas. :like_icon:

Share this post


Link to post
Share on other sites

@Joelson0007, eu tive um trabalho considerável até descobrir o caminho das pedras, mas acredito que a maior dificuldade possa ser identificar o caminho do regasm, da linha 10, no script do AutoIt.

Eu não tenho experiência nesse assunto, mas acredito que o caminho para o regasm pode ser diferente dependendo da versão do DotNet do WIndows de cada um.

Edited by Luigi

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×