Veja neste artigo onde explico como utilizar um dll desenvolvida em delphi, no C#. 
De maneira simples mostrarei o uso desta dll em uma trata são de erro forcado.


1 - No Delphi Crie um projeto "DLL Wizard", crie um formulário e nele insira os 
seguintes componentes :

 __________________________________________________
|Componente | Nome          | texto                |
 --------------------------------------------------
|Memo1      | MemoErro      |                      |
|panel1     | panel1        | Minha Dll Delphi \o/ |
|Form1      | FrmTelaErro   | Tela Erro            |
 --------------------------------------------------




2 - feito isso, deixe o seu aplicativo conforme o exemplo abaixo(No Formulário 
Criado)


unit Erro_dll;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TFrmTelaErro = class(TForm)
    MemoErro: TMemo;
    Panel1: TPanel;
    procedure FormShow(Sender: TObject);
  private
    FMostraErro: String;
    procedure SetMostraErro(const Value: String);
    { Private declarations }
  public
    property MostraErro : String read FMostraErro write SetMostraErro;
    
  end;

var
  FrmTelaErro: TFrmTelaErro;

  procedure ChamaErro(Erro : String);export;stdcall;

implementation

{$R *.dfm}

  procedure ChamaErro(Erro : String);  export;stdcall;
  begin
    try
      FrmTelaErro := TFrmTelaErro.Create(nil);
      FrmTelaErro.SetMostraErro(Erro);
      FrmTelaErro.ShowModal;
    finally
      FrmTelaErro.Free;
    end;
  end;

{ TFrmTelaErro }

procedure TFrmTelaErro.SetMostraErro(const Value: String);
begin
  FMostraErro := Value;
end;

procedure TFrmTelaErro.FormShow(Sender: TObject);
begin
  MemoErro.Clear;
  MemoErro.lines.Add(FMostraErro);
end;

end.


3 - Não se esqueça de adicionar acima do begin do Library o:


exports
    ChamaErro;



4 - Após alterado a dll, compile ela e verifique se ela foi criada, feche o delphi e  abra o visual studio, crie um projeto com o nome que desejar, acima do construtor do formulário criado insira o seguinte código abaixo:



[DllImport(@"C:\Utilizando Dll\Dll Delphi\ErroDll.dll", CallingConvention=CallingConvention.StdCall, CharSet=CharSet.Ansi)]
        static extern void ChamaErro([MarshalAs(UnmanagedType.AnsiBStr)]string Erro);




5 - Troque o caminho "C:\Utilizando Dll\Dll Delphi\ErroDll.dll", e coloque o caminho da dll que acabamos de criar em delphi.


6 - Feito isso de um duplo click no botão inserido no formulário e insira o seguinte código :


           try
            {
                for (int i = 0; i < 5000; i++)
                {
                    if (i == 3000)
                    {
                        int iVemErro = 0;
                        iVemErro = int.Parse("1564643848743848");
                    }
                }
            }
            catch (Exception ex)
            {
                ChamaErro(ex.Message); 
            }


7 - Rode o sistema, ao clicar no botão, ele ira chamar a dll criada em delphi e 
passando a ele a mensagem do erro que aconteceu, conforme a figura abaixo.



8 - Espero que gostem do exemplo, Obrigado pela atenção e até a próxima