Usando un dll COM de C # sin una biblioteca de tipos

Necesito usar un componente COM (un DLL) desarrollado en Delphi hace mucho tiempo. El problema es que: la dll no contiene una biblioteca de tipos ... y todas las funciones de interoperabilidad (por ejemplo, TlbImp) en .NET parecen depender de los TLB. El componente se ha utilizado aquí en los programas de Delphi durante muchos años sin problemas porque "no es un problema utilizar objetos COM de Delphi, porque conocemos las interfaces" (cita al desarrollador de Delphi).

¿Hay alguna manera de que pueda usar esta DLL desde c # sin un TLB? He intentado usar la DLL como no administrada, pero el único método que exporta esDllUnregisterServer, DllRegisterServer, DllCanUnloadNow yDllGetClassObject. Sé que los nombres de las clases y funciones que voy a usar, si eso puede ser de alguna ayuda.

ACTUALIZAR: He intentado implementar la sugerencia de Jeff, pero recibo este error:

"No se puede convertir el objeto COM del tipo 'ComTest.ResSrvDll' al tipo de interfaz 'ComTest.IResSrvDll'. Esta operación falló porque la llamada QueryInterface en el componente COM para la interfaz con IID '{75400500-939F-11D4-9E9-0050040CE72C} 'falló debido al siguiente error: No se admite dicha interfaz (excepción de HRESULT: 0x80004002 (E_NOINTERFACE)) ".

Esto es lo que he hecho:

Obtuve esta definición de interfaz de uno de los 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>

De esto he hecho esta interfaz.

<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>

Y esta coclass (consiguió el guid de los delphi-guys)

<code>using System.Runtime.InteropServices;

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

ACTUALIZAR

La solución de Jeff es la forma de hacerlo. Vale la pena notar, sin embargo, que la definición de la interfaz debe coincidir con los componentes COMexactamente! es decir. mismo orden, mismos nombres, etc.

Respuestas a la pregunta(7)

Su respuesta a la pregunta