dll em C#?
Moderador: Moderadores
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: dll em C#?
Olá!
Creio que a linguagem em que foi escrita a DLL não importa muito. Se você tem a DLL registrada tem que saber usá-la.
Peguei o código abaixo de um tópico postado pelo Sygecon. Tem um exemplo de como carrecar a DLL e executar um de seus métodos. Note que no exemplo, o método "GetSerialNumber" recebe dois parâmetros.
Faça um teste com a DLL que precisa usar e, se possível, informe o que ocorreu.
Creio que a linguagem em que foi escrita a DLL não importa muito. Se você tem a DLL registrada tem que saber usá-la.
Peguei o código abaixo de um tópico postado pelo Sygecon. Tem um exemplo de como carrecar a DLL e executar um de seus métodos. Note que no exemplo, o método "GetSerialNumber" recebe dois parâmetros.
Faça um teste com a DLL que precisa usar e, se possível, informe o que ocorreu.
Código: Selecionar todos
******************
FUNCTION SERIAL_HD
******************
Local TDLL:=LoadLibrary("DiskSerial.dll"), RETPORTA1, lpBuffer:=SPACE(512)
IF TDLL=0
RETURN("Erro na DLL")
FreeLibrary( TDLL )
ENDIF
RETPORTA1:=DLLCALL(TDLL,32,"GetSerialNumber",0,@lpBuffer )
FreeLibrary( TDLL )
RETURN(lpBuffer)
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
dll em C#?
Caro alxsts voce saberia me dizer qual biblioteca tenho que adiconar a meus arquivo para a funcao loadlibrary funcione, eu estou usando harbour 3.00 e quando mando compilar diz que essa funcao nao existe.
Desde ja agradeço
Desde ja agradeço
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
dll em C#?
Caro Lucimauro,
Não posso dizer com certeza, pois não mexo com Harbour. Já mexi com xHarbour.
Fiz uma busca no fórum e achei este trecho de código, postado pelo Itamar Lins:
Parece que tem que usar DllLoad() para carregar a DLL, DllCall() para chamar os métodos e DllUnload() para descarregar a DLL.
Qualquer coisa mande uma MP para ele.
Não posso dizer com certeza, pois não mexo com Harbour. Já mexi com xHarbour.
Fiz uma busca no fórum e achei este trecho de código, postado pelo Itamar Lins:
Código: Selecionar todos
/*
* $Id: testdll.prg 14688 2010-06-04 13:32:23Z vszakats $
*/
/*
* Harbour Project source code:
* DLL call demonstration.
*
* Copyright 2008 Viktor Szakats (harbour.01 syenar.hu)
* www - http://harbour-project.org
*
*/
#include "simpleio.ch"
#include "dll.ch"
#define MAX_PATH 260
PROCEDURE Main()
LOCAL hDLL
LOCAL cData
#if defined( __PLATFORM__WINDOWS )
IF hb_FileExists( "pscript.dll" )
hDLL := DllLoad( "pscript.dll" )
cData := Space( 24 )
DllCall( hDll, DLL_OSAPI, "PSGetVersion", @cData )
? ">" + cData + "<"
DllUnload( hDLL )
// ; Testing failure 1
hDLL := DllLoad( "pscript.dll" )
cData := Space( 24 )
DllCall( hDll, DLL_OSAPI, "PSGet__Version", @cData )
? ">" + cData + "<"
DllUnload( hDLL )
ENDIF
// ; Testing failure 2
hDLL := DllLoad( "nothere.dll" )
cData := Space( 24 )
DllCall( hDll, NIL, "PSGetVersion", @cData )
? cData
DllUnload( hDLL )
Qualquer coisa mande uma MP para ele.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
dll em C#?
Lucimauro
Um exemplo simples com harbour 3.0
Biblioteca para este teste: hbwin
Um exemplo simples com harbour 3.0
Biblioteca para este teste: hbwin
Código: Selecionar todos
FUNCTION MAIN
#include "hbdyn.ch"
cCep:="20735050"
nHandleDLL:=HB_LibLoad("UrlMon.dll")
nStatus:=HB_DynCall( { "URLDownloadToFileA", nHandleDLL,HB_DYN_CALLCONV_STDCALL},0,"http://cep.republicavirtual.com.br/web_cep.php?cep=" + cCep + "&formato=xml","LOGRADOURO.XML",0,0)
HB_LibFree(nHandleDLL)
IF File("LOGRADOURO.XML")
cBuf:=HB_AnsiToOem(FileStr("LOGRADOURO.XML"))
ELSE
Alert("A consulta de CEP est indispon¡vel.",{"Ok"})
RETURN .T.
ENDIF
cRes:=Upper(SubStr(cBuf, AT('<resultado>', cBuf) + 11, AT('</resultado>', cBuf) - (AT('<resultado>', cBuf) + 11)))
IF cRes = "1"
cResTxt := Upper(SubStr(cBuf, AT('<resultado_txt>', cBuf) + 15, AT('</resultado_txt>', cBuf) - (AT('<resultado_txt>', cBuf) + 15)))
cTipo := Upper(SubStr(cBuf, AT('<tipo_logradouro>', cBuf) + 17, AT('</tipo_logradouro>', cBuf) - (AT('<tipo_logradouro>', cBuf) + 17)))
cEnd := RetiraAcentos(Upper(cTipo+" "+SubStr(cBuf, AT('<logradouro>', cBuf) + 12, AT('</logradouro>', cBuf) - (AT('<logradouro>', cBuf) + 12))))
cBai := RetiraAcentos(Upper(SubStr(cBuf, AT('<bairro>', cBuf) + 8, AT('</bairro>', cBuf) - (AT('<bairro>', cBuf) + 8))))
cCid := RetiraAcentos(Upper(SubStr(cBuf, AT('<cidade>', cBuf) + 8, AT('</cidade>', cBuf) - (AT('<cidade>', cBuf) + 8))))
cUF := Upper(SubStr(cBuf, AT('<uf>', cBuf) + 4, 2))
ELSE
cResTxt := "O CEP "+Transform(cCep,"@R 99.999-999")+" é Inválido."
cTipo := ""
cEnd := ""
cBai := ""
cCid := ""
cUF := ""
ENDIF
cMess += "Resposta do servidor.: "+cResTxt + HB_OsNewLine()
cMess += "Tipo de logradouro...: "+HB_OemtoAnsi(cTipo) + HB_OsNewLine()
cMess += "Logradouro...........: "+HB_OemtoAnsi(cEnd) + HB_OsNewLine()
cMess += "Bairro...............: "+HB_OemtoAnsi(cBai) + HB_OsNewLine()
cMess += "Cidade...............: "+HB_OemtoAnsi(cCid) + HB_OsNewLine()
cMess += "UF...................: "+HB_OemtoAnsi(cUF) + HB_OsNewLine()
IF cRes == "0"
cVar0 :=Space(8)
cCid :="RIO DE JANEIRO"
cUF :="RJ"
ENDIF
RETURN Nil
FUNCTION RetiraAcentos(cPalavra)
LOCAL i:=0,;
cAcento:= '',;
cRetiraAcento:= ''
FOR I = 1 To Len(cPalavra)
cAcento:=SUBST(cPalavra, I, 1)
DO CASE
CASE cAcento $ "µÇ¶·Ž"
cAcento = "A"
CASE cAcento $ "ÓÔÒ"
cAcento = "E"
CASE cAcento $ "ÖØÞ×"
cAcento = "I"
CASE cAcento $ "àåâ™"
cAcento = "O"
CASE cAcento $ "éëêš"
cAcento = "U"
CASE cAcento $ " ƃ…„"
cAcento = "a"
CASE cAcento $ "‚‰Šˆ"
cAcento = "e"
CASE cAcento $ "¡‹Œ"
cAcento = "i"
CASE cAcento = "¢ä“”"
cAcento = "o"
CASE cAcento $ "£—–"
cAcento = "u"
CASE cAcento $ "‡"
cAcento = "c"
CASE cAcento $ "€"
cAcento = "C"
ENDCASE
cRetiraAcento += cAcento
NEXT
RETURN cRetiraAcento
►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)
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)
dll em C#?
Obrigdo por me ajudar com seu exemplo
Mais como to querendo usar a dll da daruma(darumaframeowork.dll) acho que nao ta dando certo, dar uma bocado de erro e pode para fechar o sistema.
Eu tambem tenteu com o comando loadlibrary esse nao dar erro mais quando chamo a funcao dllcall dar erro.
voce teria outros exemplos ai.
desde ja agradeço
Mais como to querendo usar a dll da daruma(darumaframeowork.dll) acho que nao ta dando certo, dar uma bocado de erro e pode para fechar o sistema.
Eu tambem tenteu com o comando loadlibrary esse nao dar erro mais quando chamo a funcao dllcall dar erro.
voce teria outros exemplos ai.
desde ja agradeço
dll em C#?
Alguns testes que eu fiz com uma dll que eu fiz em delphi:
//Retorna a string
//cStatus:=hb_dynCall( { "pcDLLVersion", "Project2.dll",hb_bitOr( HB_DYN_CTYPE_CHAR_PTR , HB_DYN_CALLCONV_CDECL )})
//info(cStatus)
//Retorna a string
//cStatus:=hb_dynCall( { "Nada", "Project2.dll",hb_bitOr( HB_DYN_CTYPE_CHAR_PTR , HB_DYN_CALLCONV_CDECL )},'TESTE COM DELPHI')
//info(cStatus)
//Retorna a string
//cStatus:=hb_dynCall( { "TrimAllChar", "Project2.dll",hb_bitOr( HB_DYN_CTYPE_CHAR_PTR , HB_DYN_CALLCONV_CDECL )},'TESTE COM DELPHI',' ')
//info(cStatus)
//Retorna a string
//cStatus:=hb_dynCall( { "DiaSemana", "Project2.dll",hb_bitOr( HB_DYN_CTYPE_CHAR_PTR , HB_DYN_CALLCONV_CDECL )},dtoc(Date()))
//info(cStatus)
Exemplo com a BEMATECH
Com a impressora BEMATECH MP2032_MP-4000TH
cImagem:="LOGOIMP.BMP"
nHandleDLL:=hb_LibLoad("MP2032.DLL") //Abre a DLL
nStatus:=hb_dynCall( { "ImprimeBitmap", nHandleDLL,HB_DYN_CALLCONV_STDCALL},cImagem,0) //Imprimir uma imagem
nStatus:=hb_dynCall( { "FormataTX", nHandleDLL,HB_DYN_CALLCONV_STDCALL},"Teste de Impressao",2, 0, 0, 0, 0) //Imprime texto
nStatus:=hb_dynCall( { "AcionaGuilhotina", nHandleDLL,HB_DYN_CALLCONV_STDCALL},1) //Corta o papel.
//Retorna a string
//cStatus:=hb_dynCall( { "pcDLLVersion", "Project2.dll",hb_bitOr( HB_DYN_CTYPE_CHAR_PTR , HB_DYN_CALLCONV_CDECL )})
//info(cStatus)
//Retorna a string
//cStatus:=hb_dynCall( { "Nada", "Project2.dll",hb_bitOr( HB_DYN_CTYPE_CHAR_PTR , HB_DYN_CALLCONV_CDECL )},'TESTE COM DELPHI')
//info(cStatus)
//Retorna a string
//cStatus:=hb_dynCall( { "TrimAllChar", "Project2.dll",hb_bitOr( HB_DYN_CTYPE_CHAR_PTR , HB_DYN_CALLCONV_CDECL )},'TESTE COM DELPHI',' ')
//info(cStatus)
//Retorna a string
//cStatus:=hb_dynCall( { "DiaSemana", "Project2.dll",hb_bitOr( HB_DYN_CTYPE_CHAR_PTR , HB_DYN_CALLCONV_CDECL )},dtoc(Date()))
//info(cStatus)
Exemplo com a BEMATECH
Com a impressora BEMATECH MP2032_MP-4000TH
cImagem:="LOGOIMP.BMP"
nHandleDLL:=hb_LibLoad("MP2032.DLL") //Abre a DLL
nStatus:=hb_dynCall( { "ImprimeBitmap", nHandleDLL,HB_DYN_CALLCONV_STDCALL},cImagem,0) //Imprimir uma imagem
nStatus:=hb_dynCall( { "FormataTX", nHandleDLL,HB_DYN_CALLCONV_STDCALL},"Teste de Impressao",2, 0, 0, 0, 0) //Imprime texto
nStatus:=hb_dynCall( { "AcionaGuilhotina", nHandleDLL,HB_DYN_CALLCONV_STDCALL},1) //Corta o papel.
►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)
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)
