Jump to content
Carlosdev

Como invocar DLL COM feita em VB no Delphi

Recommended Posts

Olá,

não sou desenvolvedor Delphi e na empresa que trabalho temos componente em Visual Basic para realizar autenticação do usuário.

Temos um sistema em Delphi feito por um cliente que precisa consumir nossa dll e o analista está com dificuldades.

Alguém poderia me ajudar a converter esse código para Delphi?

Desde já agradeço.

 

Dim obj as Object
Dim codigoRetornoLogin As Integer
Dim mensagemLogin As String    

 

'Instanciar objeto COM        
Set obj = CreateObject("DB_Seguranca.GER_SEG")        

  
'Preencher Módulo, login e senha
obj.modulo = "CONTRAT"
obj.usuario.User_ID = txtLogin.Text
obj.usuario.Senha = txtSenha.Text

 

'Validar login
codigoRetornoLogin = obj.Valida_acesso()

 

'Se retorno for <> 0, significa login é inválido
If (codigoRetornoLogin <> 0) Then
    'Obtém a mensagem de erro para exibição ao usuário
    mensagemLogin = obj.ObterMensagemLogin(codigoRetornoLogin)
    'Mata objeto COM da memória
    Set obj = Nothing
    'Exibe mensagem de negócio ao usuário
    MsgBox mensagemLogin
    Exit Sub
End If
Set obj = Nothing
        
'Usuario autenticado com sucesso
'Segue a vida...

 

 

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

  • Similar Content

    • By Karlo Uchoa
      Boa tarde meus amigos,  Estou implementando uma integração entre um banco de dados local e outro na nuvem da Amazon. Estou com um problema sério aqui: ao fazer o Putclientes, por exemplo, ou seja, ao enviar ao servidor as alterações e inserções do Banco local, se, após um insert em lote na tabela da nuvem, o Result da função Put não conseguir retornar ao cliente rest que o chamou, por uma queda do link de internet, por exemplo, esses inserts já foram commitados na nuvem, mas os relacionamentos entre o código externo gerado e o código interno enviado, não pode ser concebida. Sendo assim, no próximo Put, os clientes sem a relação entre os códigos, serão inseridas novamente, gerando duplicidade de cadastros na nuvem. Meu problema é saber como commitar a transação na nuvem somente após o Result chegar ao cliente rest que fez a chamada. Alguém pode me ajudar com isso?
    • By danilozix
      Bom dia pessoal, 
      utilizo o Delphi XE6 preciso de alguma forma de transformar uma imagem JPEG em binário(octet-stream) para enviar para um web service.
    • By Manoel010953
      Bom Dia pessoal, tudo bom? Sou novo em programação e estou tentando criar uma dll no delphi. 
      Essa dll vai ser usada em uma aplicação do delphi também.
      Queria saber se é possível utilizar vetores e matrizes e como fazer isso pois eu tentei declarar como um array of array of (um tipo), mas dá erro (essas matrizes seriam parâmetros da função). Colocando só como array of (um tipo) funciona, mas ao tentar acessar a função na dll dá um access violation. Eu já havia criado essa função dentro da minha aplicação e estava funcionando, mas na dll da esse erro. Eu tentei usar um ponteiro também, mas continua dando o erro. Por favor me ajudem.
      Segue o código:
       
      library NDC_Generator; uses SysUtils, Dialogs, Classes; Type Matriz = Array of array of string; P1 = ^Matriz; {$R *.res} procedure MensagemConfirmacao(AMensagem: WideString); stdcall; begin MessageDlg(AMensagem, mtInformation, [mbOk], 0); end; function gerarcombinacoes(Mat: P1; Xb, Total, np, NumCri: integer; mp, bud: Double; Pointer: P1): string; stdcall; var i, j, k, T, a, p: integer; aux1: string; R0: Double; vetop, vmax: array of integer; matrizaj: array of array of integer; vetmax, vetmin: array of Double; vet_aux, Vetname: array of string; matrizaux1 : array of array of Double; matriz_result: array of array of String; begin setlength(vetop, np); setlength(vmax, np); setlength(matrizaj, T, np); setlength(vetmax, NumCri); setlength(vetmin, NumCri); setlength(vet_aux, T); p := 0; for i := 0 to np - 1 do begin vmax[np - i - 1] := Xb - i; end; for i := 0 to np - 1 do vetop := i + 1; vetop[np - 1] := np - 1; for i := 0 to NumCri - 1 do begin vetmin := 100000; vetmax := -1; end; i := 0; T := 0; while (T < Total) do // Gerar as combinações com np elementos begin if T <> 1 then i := np; while (i > 0) do // Verifica se alguma das posições já atingiu seu máximo begin if (i - 1) <> 0 then // Verifica se não se trata da primeira posição que atingiu seu máximo begin if (vetop[i - 1] = vmax[i - 1]) and (vetop[i - 2] < vmax[i - 2]) then begin vetop[i - 2] := vetop[i - 2] + 1; vetop[i - 1] := vetop[i - 2]; ; if (i < np) then for j := i to np - 1 do vetop[j - 1] := vetop[j - 2] + 1; vetop[np - 1] := vetop[np - 2]; break; end; // vetop end; // 0 i := i - 1; end; // while i>0 vetop[np - 1] := vetop[np - 1] + 1; R0 := 0; for k := 0 to np - 1 do R0 := R0 + StrToFloat( Mat^[vetop[k] - 1, NumCri + 1]); if R0 <= bud then begin p := p + 1; setlength(matrizaux1, p, NumCri + 1); setlength(Vetname, p); for a := 0 to NumCri - 1 do begin for k := 0 to np - 1 do matrizaux1[p - 1, a] := matrizaux1[p - 1, a] + StrToFloat( Mat^[vetop[k] - 1, a + 1] ); if (matrizaux1[p - 1, a] > vetmax[a]) then vetmax[a] := matrizaux1[p - 1, a]; if (matrizaux1[p - 1, a] < vetmin[a]) then vetmin[a] := matrizaux1[p - 1, a]; end; matrizaux1[p - 1, NumCri] := R0; a:= 0; for k := 0 to np - 1 do Vetname[p - 1] := Vetname[p - 1] + Mat^[ vetop[k] - 1,a] + ' '; end; // R0 <= Bud T := T + 1; end; // While a := 0; k := 0; for i := 0 to p - 1 do begin if mp <> 0 then for j := 0 to NumCri - 1 do begin if vetmax[j] <> vetmin[j] then begin R0 := (matrizaux1[i, j] - vetmin[j]) / (vetmax[j] - vetmin[j]); end else R0 := 1; if R0 >= mp then begin a := a + 1; end else break; end else a := NumCri; if a = NumCri then begin k := k + 1; for j := 0 to NumCri do begin setlength(matriz_result, k, NumCri + 2); matriz_result[k - 1, j+1] := floattostr( matrizaux1[i, j]); end; matriz_result[k - 1, 0]:= Vetname; end; a := 0; end; for I := 0 to k - 1 do for j := 0 to numcri + 1 do Pointer^[i,j]:= matriz_result[i,j]; MensagemConfirmacao('Foram geradas' + inttostr(k) + 'combinações!'); Result := '0'; end; exports gerarcombinacoes; end.  
    • By bibicoreis
      Boa tarde Pessoal,
       
      Estou com a seguinte dúvida, como faço para colocar componentes sobre o webbrowser, pois quero colocar um panel flutuante, mas usando o bringtofront e o sendtoback não está funcionando,
      apenas o webbrowser fica em 1º plano.
       
      Aguardo a ajuda de voces!!
      Obrigado!
    • By manefilho
      No DataModule tenho um SQLDataSet, DataSetProvider, DataSet, quando abro o banco de dados e tento abrir a tabela TBLUSUARIOS em tempo de desenvolvimento no SQLDataSet, dá um erro: "Unknown ISC Error 0" e quando tento novamente "Attempet to reopen an open cursor". Quando digito a Query SQL no CommandText do SQLDataSet e mudo a propriedade Active para True ele retorna este erro. Ele consegue abrir qualquer uma das outras tabelas do banco de dados, menos a tabela em questão.
       
      Estava abrindo perfeitamente com o SimpleDataSet mas apaguei para usar o SQLDataSet e obtive este erro. O engraçado que tentei retornar para SimpleDataSet mas também não funciona mais, alguém pode me ajudar?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.