Harbour e .NET Framework SDK

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Harbour e .NET Framework SDK

Mensagem por rochinha »

Amiguinhos,

A anos tento fazer um teste com o Harbour para gerar um sample que seja compilado nesta plataforma.

Nunca obtive exito e mesmo porque as versões posteriores do Harbour não possuiam mais o parâmetro para geração do resultado para compilação nesta plataforma.

Recentemente procurando e deletando alguns diretórios e Harbour´s encontrei a pasta MiniGUI com a sua versão 2.

Sou xereta e gosta de testar os Harbour para ver se estão bem configurados e ao notar que o parâmetro /GI estava lá e resolvi testar num pequeno .PRG.

Desta vez obtive um código completo sem erros, então partir para o ambiente( já o tenho configurado ) e fui a caça de informação para obtenção do EXEcutável.

Depois de uma googlada encontrei informação sobre um utilitário que permitia gerar o EXEcutável a partir do .IL gerado pelo Harbour em questão.

Arquivo HELLO.PRG:

Código: Selecionar todos

   ? "Hello Word"
A versão do Harbour usada foi a Harbour MiniGUI Build 85 ( HMG 1.0 RELEASE CANDIDATE I) e o SDK usado foi o v1.1

A configuração de caminhos foi:

Código: Selecionar todos

@SET FWDIR=
@SET VSNET=
@SET dotNETSDK=

@IF "%1"=="/M" GOTO MODIFICADO

:ORIGINAL
@SET VSNET=C:\Arquivos de programas\Microsoft Visual Studio .NET 2003
@SET dotNETSDK=C:\Arquivos de programas\Microsoft.NET
GOTO CONFIGURA

:MODIFICADO
@SET FWDIR=C:\develop\Fivewin\dotNETSDK\HARBOUR
@SET VSNET=C:\develop\Fivewin\dotNETSDK
@SET dotNETSDK=C:\develop\Fivewin\dotNETSDK\dotNETv1.1\Framework\v1.1.4322

:CONFIGURA
@SET PATH=%dotNETSDK%\;%VSNET%\v1.1\bin\;%VSNET%\Vc7\bin\;%VSNET%\Common7\IDE\;%FWDIR%\bin;%PATH%
@SET LIB=%VSNET%\Vc7\lib\;"%dotNETSDK%\";%FWDIR%\lib;%LIB%
@SET INCLUDE=%VSNET%\Vc7\include\;"%dotNETSDK%\";%FWDIR%\include;%INCLUDE%

@SET NetSamplePath="%dotNETSDK%\v1.1\"
Arquivo HELLO.IL gerado pelo comando harbour /gi hello:

Código: Selecionar todos

// Harbour Compiler, Alpha build 43.0 (Flex)
// Generated .NET IL source code

.assembly extern mscorlib{}
.assembly HELLO_PRG{}

.method public static void HELLO()
{
  .entrypoint
  IL_0000:  nop  // HB_P_LINE
  IL_0003:  nop
  IL_0006:  ldstr "Hello Word"
  IL_0013:  call object QOUT( object )
            pop
   ret
}

.method public static object ObjAdd(object a, object b)
{
  .maxstack  2
  .locals init (object V_0)
  IL_0000:  ldarg.0
  IL_0001:  callvirt   instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
  IL_0006:  ldtoken    [mscorlib]System.Int32
  IL_000b:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
  IL_0010:  bne.un.s   IL_003b
  IL_0012:  ldarg.1
  IL_0013:  callvirt   instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
  IL_0018:  ldtoken    [mscorlib]System.Int32
  IL_001d:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
  IL_0022:  bne.un.s   IL_003b
  IL_0024:  ldarg.0
  IL_0025:  unbox      [mscorlib]System.Int32
  IL_002a:  ldind.i4
  IL_002b:  ldarg.1
  IL_002c:  unbox      [mscorlib]System.Int32
  IL_0031:  ldind.i4
  IL_0032:  add
  IL_0033:  box        [mscorlib]System.Int32
  IL_0038:  stloc.0
  IL_0039:  br.s       IL_0077
  IL_003b:  ldarg.0
  IL_003c:  callvirt   instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
  IL_0041:  ldtoken    [mscorlib]System.String
  IL_0046:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
  IL_004b:  bne.un.s   IL_0073
  IL_004d:  ldarg.1
  IL_004e:  callvirt   instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
  IL_0053:  ldtoken    [mscorlib]System.String
  IL_0058:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
  IL_005d:  bne.un.s   IL_0073
  IL_005f:  ldarg.0
  IL_0060:  callvirt   instance string [mscorlib]System.Object::ToString()
  IL_0065:  ldarg.1
  IL_0066:  callvirt   instance string [mscorlib]System.Object::ToString()
  IL_006b:  call       string [mscorlib]System.String::Concat(string,string)
  IL_0070:  stloc.0
  IL_0071:  br.s       IL_0077
  IL_0073:  ldnull
  IL_0074:  stloc.0
  IL_0075:  br.s       IL_0077
  IL_0077:  ldloc.0
  IL_0078:  ret
}

.method public static vararg object ObjArrayGen()
{
  .maxstack  2
  .locals init (class [mscorlib]System.Collections.ArrayList V_0,
                valuetype [mscorlib]System.ArgIterator V_1,
                object V_2)
  IL_0000:  newobj     instance void [mscorlib]System.Collections.ArrayList::.ctor()
  IL_0005:  stloc.0
  IL_0006:  ldloca.s   V_1
  IL_0008:  arglist
  IL_000a:  call       instance void [mscorlib]System.ArgIterator::.ctor(valuetype [mscorlib]System.RuntimeArgumentHandle)
  IL_000f:  br.s       IL_0025
  IL_0011:  ldloc.0
  IL_0012:  ldloca.s   V_1
  IL_0014:  call       instance typedref [mscorlib]System.ArgIterator::GetNextArg()
  IL_0019:  refanyval  [mscorlib]System.Object
  IL_001e:  ldind.ref
  IL_001f:  callvirt   instance int32 [mscorlib]System.Collections.ArrayList::Add(object)
  IL_0024:  pop
  IL_0025:  ldloca.s   V_1
  IL_0027:  call       instance int32 [mscorlib]System.ArgIterator::GetRemainingCount()
  IL_002c:  ldc.i4.0
  IL_002d:  bgt.s      IL_0011
  IL_002f:  ldloc.0
  IL_0030:  stloc.2
  IL_0031:  br.s       IL_0033
  IL_0033:  ldloc.2
  IL_0034:  ret
}

.method public static object ObjArrayPush(object 'array', object index)
{
  .maxstack  3
  .locals init (object V_0)
  IL_0000:  ldarg.0
  IL_0001:  castclass  [mscorlib]System.Collections.ArrayList
  IL_0006:  ldarg.1
  IL_0007:  unbox      [mscorlib]System.Int32
  IL_000c:  ldind.i4
  IL_000d:  ldc.i4.1
  IL_000e:  sub
  IL_000f:  callvirt   instance object [mscorlib]System.Collections.ArrayList::get_Item(int32)
  IL_0014:  stloc.0
  IL_0015:  br.s       IL_0017
  IL_0017:  ldloc.0
  IL_0018:  ret
}

.method public static bool ObjLessEqual( object a, object b )
{
  .maxstack  2
  .locals init (bool V_0)
  IL_0000:  ldarg.0
  IL_0001:  callvirt   instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
  IL_0006:  ldtoken    [mscorlib]System.Int32
  IL_000b:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
  IL_0010:  bne.un.s   IL_003a
  IL_0012:  ldarg.1
  IL_0013:  callvirt   instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
  IL_0018:  ldtoken    [mscorlib]System.Int32
  IL_001d:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
  IL_0022:  bne.un.s   IL_003a
  IL_0024:  ldarg.0
  IL_0025:  unbox      [mscorlib]System.Int32
  IL_002a:  ldind.i4
  IL_002b:  ldarg.1
  IL_002c:  unbox      [mscorlib]System.Int32
  IL_0031:  ldind.i4
  IL_0032:  cgt
  IL_0034:  ldc.i4.0
  IL_0035:  ceq
  IL_0037:  stloc.0
  IL_0038:  br.s       IL_003e
  IL_003a:  ldc.i4.0
  IL_003b:  stloc.0
  IL_003c:  br.s       IL_003e
  IL_003e:  ldloc.0
  IL_003f:  ret
}

.method public static bool ObjForTest(object current,object end,object step)
{
  .maxstack  2
  .locals init (bool V_0)
  IL_0000:  ldarg.2
  IL_0001:  unbox      [mscorlib]System.Int32
  IL_0006:  ldind.i4
  IL_0007:  ldc.i4.0
  IL_0008:  blt.s      IL_0020
  IL_000a:  ldarg.0
  IL_000b:  unbox      [mscorlib]System.Int32
  IL_0010:  ldind.i4
  IL_0011:  ldarg.1
  IL_0012:  unbox      [mscorlib]System.Int32
  IL_0017:  ldind.i4
  IL_0018:  cgt
  IL_001a:  ldc.i4.0
  IL_001b:  ceq
  IL_001d:  stloc.0
  IL_001e:  br.s       IL_0036
  IL_0020:  ldarg.0
  IL_0021:  unbox      [mscorlib]System.Int32
  IL_0026:  ldind.i4
  IL_0027:  ldarg.1
  IL_0028:  unbox      [mscorlib]System.Int32
  IL_002d:  ldind.i4
  IL_002e:  clt
  IL_0030:  ldc.i4.0
  IL_0031:  ceq
  IL_0033:  stloc.0
  IL_0034:  br.s       IL_0036
  IL_0036:  ldloc.0
  IL_0037:  ret
}

.method public static bool ObjExactlyEqual(object a, object b)
{
  .maxstack  2
  .locals init (bool V_0)
  IL_0000:  ldarg.0
  IL_0001:  callvirt   instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
  IL_0006:  ldtoken    [mscorlib]System.Int32
  IL_000b:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
  IL_0010:  bne.un.s   IL_0037
  IL_0012:  ldarg.1
  IL_0013:  callvirt   instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
  IL_0018:  ldtoken    [mscorlib]System.Int32
  IL_001d:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
  IL_0022:  bne.un.s   IL_0037
  IL_0024:  ldarg.0
  IL_0025:  unbox      [mscorlib]System.Int32
  IL_002a:  ldind.i4
  IL_002b:  ldarg.1
  IL_002c:  unbox      [mscorlib]System.Int32
  IL_0031:  ldind.i4
  IL_0032:  ceq
  IL_0034:  stloc.0
  IL_0035:  br.s       IL_0073
  IL_0037:  ldarg.0
  IL_0038:  callvirt   instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
  IL_003d:  ldtoken    [mscorlib]System.String
  IL_0042:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
  IL_0047:  bne.un.s   IL_006f
  IL_0049:  ldarg.1
  IL_004a:  callvirt   instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
  IL_004f:  ldtoken    [mscorlib]System.String
  IL_0054:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
  IL_0059:  bne.un.s   IL_006f
  IL_005b:  ldarg.0
  IL_005c:  callvirt   instance string [mscorlib]System.Object::ToString()
  IL_0061:  ldarg.1
  IL_0062:  callvirt   instance string [mscorlib]System.Object::ToString()
  IL_0067:  call       bool [mscorlib]System.String::op_Equality(string,string)
  IL_006c:  stloc.0
  IL_006d:  br.s       IL_0073
  IL_006f:  ldc.i4.0
  IL_0070:  stloc.0
  IL_0071:  br.s       IL_0073
  IL_0073:  ldloc.0
  IL_0074:  ret
}

.method public static object ObjNot(object o)
{
  .maxstack  2
  .locals init (object V_0)
  IL_0000:  ldarg.0
  IL_0001:  unbox      [mscorlib]System.Boolean
  IL_0006:  ldind.i1
  IL_0007:  ldc.i4.0
  IL_0008:  ceq
  IL_000a:  box        [mscorlib]System.Boolean
  IL_000f:  stloc.0
  IL_0010:  br.s       IL_0012
  IL_0012:  ldloc.0
  IL_0013:  ret
}

.method public static object LEN(object o)
{
  .maxstack  2
  .locals init (object V_0)
  IL_0000:  ldarg.0
  IL_0001:  castclass  [mscorlib]System.Collections.ArrayList
  IL_0006:  callvirt   instance int32 [mscorlib]System.Collections.ArrayList::get_Count()
  IL_000b:  box        [mscorlib]System.Int32
  IL_0010:  stloc.0
  IL_0011:  br.s       IL_0013
  IL_0013:  ldloc.0
  IL_0014:  ret
}

.method public static object QOUT(object o)
{
  .maxstack  2
  .locals init (object V_0)
  IL_0000:  ldarg.0
  IL_0001:  callvirt   instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
  IL_0006:  ldtoken    [mscorlib]System.Boolean
  IL_000b:  call       class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle)
  IL_0010:  bne.un.s   IL_002e
  IL_0012:  ldarg.0
  IL_0013:  unbox      [mscorlib]System.Boolean
  IL_0018:  ldind.i1
  IL_0019:  brtrue.s   IL_0022
  IL_001b:  ldstr      ".F."
  IL_0020:  br.s       IL_0027
  IL_0022:  ldstr      ".T."
  IL_0027:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_002c:  br.s       IL_0048
  IL_002e:  ldarg.0
  IL_002f:  callvirt   instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
  IL_0034:  brtrue.s   IL_0042
  IL_0036:  ldstr      "nil"
  IL_003b:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_0040:  br.s       IL_0048
  IL_0042:  ldarg.0
  IL_0043:  call       void [mscorlib]System.Console::WriteLine(object)
  IL_0048:  ldnull
  IL_0049:  stloc.0
  IL_004a:  br.s       IL_004c
  IL_004c:  ldloc.0
  IL_004d:  ret
}
Agora era partir para a geração do EXE e então usei o comando ILASM hello.il

E o resultado esta neste arquivo

Vejam que foi somente um teste, mas eu consegui!, além disto não sei o que seria possivel.

Mas serve para demonstrar que Harbour, como diria meu amigo Máscara...

"...É demaisssssss!"
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Harbour e .NET Framework SDK

Mensagem por sygecom »

Show de bola Rochinha,
O exe é muito pequeno, porem o fonte é enorme comparado ao .PRG mas o teste foi muito legal...parabéns.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Harbour e .NET Framework SDK

Mensagem por bencz »

Olá... estou começando a estudar o Clipper, exatamente com essa pretensão, q é de criar um compilador p/ clipper open source p/ gerar código IL, existe um compilador, q é o vulcan, mas ele é pago, a mesma coisa para o Cobol...
sou programador em Cobol, e venho a tempos tentando desenvolver um compilador p/ cobol p/ gerar .net, me baseio bastante no Visual Cobol, da Micro Focus...

Então, rochinha, te pergunto, se você aceitaria fazer parte da minha equipe, p/ desenvolver o compilador p/ clipper.
qq coisa, mande um e-mail ou me add no msn: alebencz@live.ru

Para os outros, q aceitarem fazer parte do projeto podem me mandar um e-mail, ou me add no msn ((:

OBS: é um Free Time Project (:
Imagem
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Harbour e .NET Framework SDK

Mensagem por rochinha »

Amiguinho,

Se voce quer se aventurar nesta plataforma lhe indico os seguintes passos, mas voce deve seguir a risca para poder ter o resultado correto.

Voce precisará ter as seguintes pastas em seu drive D:

Se não tiver um drive D: crie uma pasta e qualquer no drive C: e use o comando subst do DOS: subst d: c:\pasta

Crie dentro destas pastas as estruturas como mostrado abaixo:

D:\develop\Fivewin\dotNETSDK\FiveNET
D:\develop\Fivewin\HARBOUR-31
D:\develop\bcc558

Procure na internet o download do Harbour-31 MingW e o BorlandC++ 558 coloque-os de forma que fiquem como na estrutura acima.

Baixe FiveNET.rar e joque o seu conteúdo dentro da pasta D:\develop\Fivewin\dotNETSDK\FiveNET

A estrutura desta pasta ficará:

D:\develop\Fivewin\dotNETSDK\FiveNET\include
D:\develop\Fivewin\dotNETSDK\FiveNET\lib
D:\develop\Fivewin\dotNETSDK\FiveNET\obj
...

Devo lembrar que será necessário registrar a FiveNET.dll antes, usando %windir%\Microsoft.NET\Framework\ ...versao... \regasm fivenet.dll /tlb

Certifique-se que voce possui o .NET Framework 4.0 instalado. Para isto use .NET Framework Detector

A chave de toda configuração esta no arquivo FiveNETSDK.bat que deverá ser executado com o parametro /M.

Código: Selecionar todos

@echo off
rem ------------------------------------------------------------------------
rem ORIGINAL
rem SET VSNET=C:\Arquivos de programas\Microsoft Visual Studio .NET 2003
rem SET dotNETSDK=C:\Arquivos de programas\Microsoft.NET
rem .
rem MODIFICADO
rem SET VSNET=C:\Fivewin\dotNETSDK
rem SET dotNETSDK=C:\Fivewin\dotNETSDK
rem .
rem PATH
rem %dotNETSDK%\SDK\v1.1\Bin\
rem C:\WIN2003\Microsoft.NET\Framework\v1.1.4322\
rem %VSNET%\Vc7\bin\
rem %VSNET%\Common7\IDE\
rem %PATH%
rem .
rem LIB
rem %VSNET%\Vc7\lib\
rem "%dotNETSDK%\SDK\v1.1\Lib\"
rem %LIB%
rem .
rem INCLUDE
rem %VSNET%\Vc7\include\
rem "%dotNETSDK%\SDK\v1.1\include\"
rem %INCLUDE%
rem .
rem NetSamplePath="%dotNETSDK%\SDK\v1.1\"
rem .
rem ------------------------------------------------------------------------
rem .
rem Set Path=C:\Arquivos de programas\Microsoft.NET\SDK\v1.1\Bin\;C:\WIN2003\Microsoft.NET\Framework\v1.1.4322\;C:\Arquivos de programas\Microsoft Visual Studio .NET 2003\Vc7\bin\;C:\Arquivos de programas\Microsoft Visual Studio .NET 2003\Common7\IDE\;%PATH%
rem Set LIB=C:\Arquivos de programas\Microsoft Visual Studio .NET 2003\Vc7\lib\;"C:\Arquivos de programas\Microsoft.NET\SDK\v1.1\Lib\";%LIB%
rem Set INCLUDE=C:\Arquivos de programas\Microsoft Visual Studio .NET 2003\Vc7\include\;"C:\Arquivos de programas\Microsoft.NET\SDK\v1.1\include\";%INCLUDE%
rem Set NetSamplePath=C:\ARQUIV~1\MICROS~1.NET\SDK\v1.1\
rem .
rem ------------------------------------------------------------------------
@SET FWDIR=
@SET VSNET=
@SET dotNETSDK=

@IF "%1"=="/M" GOTO MODIFICADO

:ORIGINAL
@SET VSNET=C:\Arquivos de programas\Microsoft Visual Studio .NET 2003
@SET dotNETSDK=C:\Arquivos de programas\Microsoft.NET
GOTO CONFIGURA

:MODIFICADO
@SET FWDIR=D:\develop\Fivewin\dotNETSDK\FiveNET
@SET HBDIR=D:\develop\Fivewin\HARBOUR-31
@SET BCDIR=D:\develop\bcc558
@REM SET FWDIR=D:\develop\Fivewin\dotNETSDK\HARBOUR
@SET VSNET=D:\develop\Fivewin\dotNETSDK
@SET dotNETSDK=%windir%\Microsoft.NET\Framework\v4.0.30319

:CONFIGURA
@SET PATH=%windir%;%dotNETSDK%\;%VSNET%\Vc7\bin\;%VSNET%\Common7\IDE\;%BCDIR%\bin;%PATH%
@SET LIB=%VSNET%\Vc7\lib\;"%dotNETSDK%\";%FWDIR%\lib;%LIB%
@SET INCLUDE=%VSNET%\Vc7\include\;"%dotNETSDK%\";%FWDIR%\include;%INCLUDE%

@SET NetSamplePath="%dotNETSDK%\v2.0\"
rem 
rem ------------------------------------------------------------------------

echo **********************************************
echo Ambiente preparado para uso com dotNET SDK 4.0
echo **********************************************
echo.
echo.
Após baixados todos os arquivos necessários entre na pasta D:\develop\Fivewin\dotNETSDK\FiveNET e de dois no atalho FiveNET

Tudo correndo bem e os caminhos estiverem bem patheados voce será direcionado para a pasta samples onde tem alguns .PRGs e alguns executáveis já compilados.

Para compilar bastará usar Build.bat tutor01 ou outro nome de arquivo.

Por algum motivo que desconheço não pude linkar a biblioteca FiveNET e por isto coloquei o conteúdo do source da mesma em cada .PRG para a compilaçõa continuar.

Código: Selecionar todos

// (c) FiveTech Software 2011, GPL2 licence

#xcommand TRY              => bError := errorBlock( {|oErr| break( oErr ) } ) ;;
                              BEGIN SEQUENCE
#xcommand CATCH [<!oErr!>] => errorBlock( bError ) ;;
                              RECOVER [USING <oErr>] <-oErr-> ;;
                              errorBlock( bError )
                               
#define MB_ICONEXCLAMATION    0x00000030                               
                                 
static oFiveNet

// FiveNet - simple message

function Main()

   MsgInfo( "Welcome to FiveNet" )
   
return nil

init procedure FiveNet

   local bError

   if oFiveNet == nil
      try
         oFiveNet = win_oleCreateObject( "FiveTech.FiveNet" )
      catch bError
         wapi_MessageBox( 0, "Can't create object 'FiveTech.FiveNet'",;
                          "Please use register.bat", MB_ICONEXCLAMATION )
      end
   endif

return

exit procedure __exit

   oFiveNet = nil
   
return  

function MsgInfo( cMsg )

   if oFiveNet != nil
      return oFiveNet:MsgInfo( cMsg )
   endif

return nil

function CreateForm()

   if oFiveNet != nil
      return oFiveNet:CreateForm()
   endif

return nil

function CreateLabel()

   if oFiveNet != nil
      return oFiveNet:CreateLabel()
   endif

return nil

function CreateTextBox()

   if oFiveNet != nil
      return oFiveNet:CreateTextBox()
   endif

return nil

function CreateButton()

   if oFiveNet != nil
      return oFiveNet:CreateButton()
   endif

return nil

function CreateComboBox()

   if oFiveNet != nil
      return oFiveNet:CreateComboBox()
   endif

return nil

function CreateMainMenu( oForm )

   if oFiveNet != nil
      return oFiveNet:CreateMainMenu( oForm )
   endif

return nil

function MenuAddItem( oForm, cItem )

   if oFiveNet != nil
      return oFiveNet:MenuAddItem( oForm, cItem )
   endif

return nil


function CreateToolStrip()

   if oFiveNet != nil
      return oFiveNet:CreateToolStrip()
   endif

return nil

function CreateStatusStrip()

   if oFiveNet != nil
      return oFiveNet:CreateStatusStrip()
   endif

return nil

function AppRun( oForm )

   if oFiveNet != nil
      return oFiveNet:Run( oForm )
   endif

return nil

function AddControl( oForm, oControl )

   if oFiveNet != nil
      return oFiveNet:AddControl( oForm, oControl )
   endif

return nil

#pragma BEGINDUMP

#include <hbapi.h>
#include <hbapiitm.h>
#include <windows.h>

HB_FUNC( PBLOCK )
{
   hb_retnl( ( LONG ) hb_param( 1, HB_IT_BLOCK ) );
}   

void _export FNET1( unsigned long pBlock )
{
   if( pBlock )
      hb_evalBlock0( ( PHB_ITEM ) pBlock );
}

HRESULT hb_oleVariantToItem( PHB_ITEM pItem, VARIANT * pVariant );

void _export FNET2( unsigned long pBlock, VARIANT * sender )
{
   PHB_ITEM pSender = hb_itemNew( NULL );

   // MessageBox( 0, "inside FNET2", "ok", 0 );
   
   if( sender )
   {
      // MessageBox( 0, "sender is ok", "ok", 0 );
      hb_oleVariantToItem( pSender, sender );
   }   

   // hb_itemPutNL( pSender, sender->n1.n2.vt ); 

   if( pBlock )
      hb_evalBlock1( ( PHB_ITEM ) pBlock, pSender );
      
   hb_itemRelease( pSender );   
}

void _export FNET3( unsigned long pBlock, VARIANT * sender, VARIANT * event )
{
   PHB_ITEM pSender = hb_itemNew( NULL );
   PHB_ITEM pEvent  = hb_itemNew( NULL );
   
   // MessageBox( 0, "inside FNET3", "ok", 0 );
   
   hb_oleVariantToItem( pSender, sender );
   hb_oleVariantToItem( pEvent, event );

   if( pBlock )
      hb_evalBlock( ( PHB_ITEM ) pBlock, pSender, pEvent, 0 );
}

#pragma ENDDUMP  
Mas o intuito aqui não é trabalhar com a FiveNET, mas sim ilustrar que as versões mais novas do Harbour estão com esta caracteristica melhorada e portanto antes que comece a desenvolver uma roda, use a que já esta redonda.

Siga a receita do bolo sem modificar os ingredientes e o sabor final será de vitória.

Fonte: FiveNET Wiki

Fui #-)
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Harbour e .NET Framework SDK

Mensagem por bencz »

Olá (:
Obrigado pela resposta (:

bom... o harbour-3.1 nao encontrei e nem o borland cpp 5.5.8
o harbour tem até o 3.0 e o borland, encontrei até o 5.5.1... como faz ??
Imagem
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Harbour e .NET Framework SDK

Mensagem por rochinha »

Amiguinho,

Em primeiro lugar, obrigado pelo convite, mas sou o cara mais enrolado do planeta e sinceramente eu não poderia aceitar, não por orgulho, mas porque antes teria da dar um não para 3 empresas do Paraná que já me convidaram para tal.

Em relação ao compilador, como expus, o Harbour já vem trabalhando nisto. Mesmo que se atentar para o inicio do Post, anos antes de postá-lo o Harbour já fazia isto.

Vale a penatrabalhar sobre o que já esta ai e dar um feedback para que os programadores possam ampliar e melhorar o projeto.

Quanto ao que coloquei na receita é básicamente o que pude usar e obter resultado, se tentar outras versões de Harbour e outros compiladores voce mesmo terá de configurar e encontrar as pendencias.

Mas em suma, é promissor.

Quanto ao Harbour, não sei onde encontrei a versão harbour-3.1-17042 que usei, mas ela é diferente da versão que uso harbour-3.1-17222, provavelmente seja a versão nigthly

Dê uma pesquisada no projeto Harbour e HMG.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Harbour e .NET Framework SDK

Mensagem por rochinha »

Amiguinhos,

Acabei por baixar a versão Harbour 3.2 Nigthly, instalar e testar com o conteúdo do tópico acima e obtive resultado rápido e preciso.

Não é necessário nada do Borland C++ bastando instalar e setar o caminho correto no FiveNETSDK.bat
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Harbour e .NET Framework SDK

Mensagem por asimoes »

Olá Rochinha,

Quais as modificações necessárias para compilar com mingw (hb3.2)

[]´S
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Harbour e .NET Framework SDK

Mensagem por rochinha »

Amiguinho,

Pelos testes que fiz, não foi necessário nenhum. Desde que os caminhos sejam encontrados não houve problemas ao compilar e executar.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Harbour e .NET Framework SDK

Mensagem por asimoes »

Rochinha,
a bat go.bat faz:
%BCDIR%\bin\make -ffivenet.mak

O fivenet.mak é compilado com o make do bcc58, tem como gerar a lib para mingw?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Harbour e .NET Framework SDK

Mensagem por rochinha »

Amiguinho,

O source dos comandos do FiveNET estão disponiveis na pasta e pode sim ser gerada a LIB usando o MingW. Se voce já tem afinidade com o compilador ficará mais fácil.

Eu até gerei a biblioteca com Borland, mas no momento da compilação acontecia um erro de não reconhecimento da mesma e optei, já que ea para conhecer e mais preocupado em configurar o SDK, em agregar o conteúdo do source ao .PRG que iria testar.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Harbour e .NET Framework SDK

Mensagem por bencz »

Baixei o código fonte do harbour... e procurei pelo codegen q gera o IL.... e nao consigo encontrar :/
Imagem
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Harbour e .NET Framework SDK

Mensagem por sygecom »

Olá bencz,
Isso você deve encontrar na TAG do SVN do Projeto Harbour
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Harbour e .NET Framework SDK

Mensagem por bencz »

jah busquei nas tags :X
Imagem
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Harbour e .NET Framework SDK

Mensagem por sygecom »

Baixe o Harbour completo do SVN e procure por genjava.c, que com certeza tem lá.
\harbour\tags\troff\harbour\source\compiler\genjava.c
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder