Usando uma DLL COM do C # sem uma biblioteca de tipos

Eu preciso usar um componente COM (um dll) desenvolvido em Delphi idades atrás. O problema é: a dll não contém uma biblioteca de tipos ... e todos os recursos de interoperabilidade (por exemplo, TlbImp) no .NET parecem depender de TLBs. O componente tem sido usado em programas Delphi aqui por muitos anos sem problemas porque "Não é muito problema usar objetos COM do Delphi, porque sabemos as interfaces" (citar desenvolvedor Delphi).

Existe alguma maneira eu posso usar essa DLL de c # sem um TLB? Eu tentei usar a DLL como não gerenciada, mas o único método que exporta sãoDllUnregisterServer, DllRegisterServer, DllCanUnloadNow eDllGetClassObject. Eu sei os nomes das classes e funções que vou usar, se isso puder ser de alguma ajuda.

ATUALIZAR: Eu tentei implementar a sugestão de Jeff, mas estou recebendo este erro:

"Não é possível converter o objeto COM do tipo 'ComTest.ResSrvDll' para o tipo de interface 'ComTest.IResSrvDll'. Essa operação falhou porque a chamada QueryInterface no componente COM para a interface com o IID '{75400500-939F-11D4-9E44-0050040CE72C} 'falhou devido ao seguinte erro: Nenhuma interface suportada (Exceção de HRESULT: 0x80004002 (E_NOINTERFACE)). "

Isso é o que eu fiz:

Eu tenho essa definição de interface de um dos Delphi-guys:

<code>unit ResSrvDllIf;

interface

type
   IResSrvDll = interface
   ['{75400500-939F-11D4-9E44-0050040CE72C}']
    procedure clearAll;

    function  ResObjOpen(const aClientID: WideString; const aClientSubID: WideString;
                         const aResFileName: WideString; aResShared: Integer): Integer; {safecall;}
    ...
   end;
implementation
end.
</code>

A partir disso eu fiz essa interface

<code>using System.Runtime.InteropServices;
namespace ComTest
{
    [ComImport]
    [Guid("75400500-939F-11D4-9E44-0050040CE72C")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IResSrvDll
    {
        int ResObjOpen(string aClientID, string aClientSubID, string aResFileName, int aResShared);

    }
}
</code>

E este coclass (pegou o guia dos delphi-guys)

<code>using System.Runtime.InteropServices;

namespace ComTest
{
    [ComImport]
    [Guid("75400503-939F-11D4-9E44-0050040CE72C")]
    public class ResSrvDll
    {
    }
}
</code>

ATUALIZAR

A solução de Jeff é a maneira de fazer isso. Vale a pena notar, porém, que a definição da interface deve coincidir com os componentes COMexatamente! ie. mesma ordem, mesmos nomes, etc.

questionAnswers(7)

yourAnswerToTheQuestion