none
DLL no C# para acesso no Delphi 7! RRS feed

  • Pergunta

  • Ok, pessoal ja pesquisei um tanto mas nao achei um howto ideal, preciso fazer uma dll em .net c# e acessa-la no delphi.

    Achei varios exemplos uns diferentes do outro, estou com esse e funciona:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
    namespace DLLTeste
    {
        [Guid("7BEC98F1-E4ED-422c-9B59-30B9426E40FE")]
        [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
        public interface IDLLTeste
        {
            string teste(string dados); 
        }

        [Guid("14891E44-155B-4ee3-B50A-6150D2A284AB")]
        [ClassInterface(ClassInterfaceType.None)]
        [ProgId("teste")]
        public class TesteDLL: IDLLTeste
        {
            public string teste(string dados)
            {
                return dados + " - funfou";
            }
        }
    }

    Ok, com tipos basicos como string funciona, ja testei com string[] e vai, mas ja com string[][], ja nao rolou.
    O que eu queria mesmo era receber e enviar objetos do C# la no Delphi, tem como? Tipo crio uma classe com varios atributos, queria usa-la no delphi mas nao sei como fazer, se é que é possivel.

    Se alguem puder dar um help, ou um tutorial completo, preciso saber tanto como fazer no C#, como acessar no delphi, e da maneira mais clean possivel.

    Ja trabalhei com delphi, mas ja faz 5 anos que nao mexo, programo java, to começando .net c# agora, resumindo nunca tive que contruir e/ou acessar dll's diretamente.
    Um exemplo completo seria perfeito.

    Grato!
    sábado, 29 de novembro de 2008 01:41

Respostas

Todas as Respostas

  • Consegui o que queria fazer, isso me clareou a mente:

    http://www.c-sharpcorner.com/UploadFile/yougerthen/510262008060749AM/5.aspx


    e isso fechou tudo, apesar dele consumir a dll em VB, o que importava era como era feita:

    http://www.c-sharpcorner.com/UploadFile/yougerthen/910262008061425AM/9.aspx
    sábado, 29 de novembro de 2008 22:13
  • Olá Frederico,

    estou com um problema bem semelhante. Eu sou programador, conheço bastante de .net, java e vfp. Recentemente eu criei uma dll em C# e consumo esta usando o progid como referencia. Ex:

    em VFP:
    Local loObjeto as Object
    loObjeto = CreateObject('meucomponente.minhaclasse')
    loObjeto.MeuMetodo()

    em VBS:
    Dim loObjeto
    Set loObjeto = createobject("meucomponente.minhaclasse")
    loObjeto.MeuMetodo()


    e por ai vai, bem simples fazer a referencia pelo Progid.

    mas agora eu preciso consumir essa dll no delphi 7. O que eu tenho que fazer? eu segui esse tutorial e mesmo assim não soube consumir no Delphi. Como que eu consumo no delphi? qual opção dele que eu tenho q usar? 

    alguém sabe me explicar?

    agradeço qualquer ajuda.
    quarta-feira, 24 de junho de 2009 02:41
  • Paulo,

    Caso ainda não tenha conseguido solucionar o seu problema, segue a resposta.

    Para chamar um método em uma DLL COM Interoperável é semelhante a outras linguagens, basta usar a função CreateOleObject

    procedure ChamarDLL
    var
       olObjeto: OleVariant;
    begin
       olObjeto := CreateOleObject('meucomponente.minhaclasse');
       olObjeto.MeuMetodo();
       olObjeto := null;
    end;

    Outra forma de executar uma DLL COM no Delphi é importar (se a mesma permitir) a Type Library desta DLL usando uma ferramenta existente no Delphi. A mesma esta localizada no menu Component->Import Component. Quando a ferramenta for executada, você deve usar a opção "Import a Type Library", selecione o componente COM na lista que será apresentada e siga os próximos passos (são simples). Ao final do processo, será gerada um UNIT contendo as interfaces, métodos, atributos e GUIDs expostos pela DLL COM+ ou COM Interop.

    Marcos
    terça-feira, 14 de julho de 2009 12:14
  • Seguindo o tutorial do link que vc postou funcionou perfeitamente.

    Porém o software não vai rodar no meu pc e sim em outro que não tem o Delphi e nem o VS2005 que utilizei.

    Como vc fez para distribuir o aplicativo? Onde e Como registrou a DLL criada?


     
    quarta-feira, 2 de setembro de 2009 13:25
  • Frederico,

    Verifique os atrbutos ComRegisterFunction e ComUnregisterFunction. Você pode usá-los para indicar os métodos responsáveis em disponibilizar o objeto como se fosse um COM+ Win32.
    Tytto
    • Sugerido como Resposta Tytto sexta-feira, 20 de novembro de 2009 20:38
    • Marcado como Resposta Harley AraujoModerator terça-feira, 26 de outubro de 2010 13:22
    sexta-feira, 20 de novembro de 2009 20:38