от
У меня на C# DLL, которая является видимым для COM. В одном из методов .Чистая исключений быть пойманным, что я хотел бы размножить в VBA. Я прочитал ряд статей в Google, и этот пост здесь: Обработка ошибок в C# / VBA для COM-взаимодействия Код у меня выглядит следующим образом:
[Guid("....")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[ProgId("...")]
public class DBCommand : IDBCommand
{
    public string Read()
    {
        string lRetVal = string.Empty;

        try
        {
            // Have we executed yet?
            if (this._Reader == null)
            {
               this.Execute();
            }
            .
            . 
        }
    }

   private void Execute()
   {
        try
        {
            if (this._Reader == null)
            {
                this._Reader = this._Command.ExecuteReader();
                this._HasRows = _Reader.HasRows;
                this._Schema = _Reader.GetSchemaTable();
                this._Fields = new object[this._Reader.FieldCount];
            }

        }
        catch (SqlException e)
        {
            COMExceptionMessage ex = new COMExceptionMessage(e.Message, e.HResult);
            throw ex;
        }
}
Основываясь на том, что я понимаю, CLR должна передать значение HRESULT в исключение comexception в VBA? Тестовый код VBA выглядит следующим образом:
Sub test()
On Error GoTo Err_test:

Dim lConn As SQLInventory.DBConnection
Dim lCmd As SQLInventory.DBCommand
Dim lResponse As String

Set lConn = New SQLInventory.DBConnection
Set lCmd = New SQLInventory.DBCommand

lConn.Authentication = DBAuthentication_Windows
lConn.Server = "SERVER01"
lConn.Database = "MyDB"

If Not lConn.Connect Then

    GoTo Exit_test

End If

lCmd.Query = "SQL statement with a syntax error in it."


lResponse = lCmd.Read
While (lResponse <> "")
    Debug.Print lResponse
    lResponse = lCmd.Read
Wend

lCmd.Dispose
lConn.Disconnect

Exit_test:

Set lCmd = Nothing
Set lConn = Nothing

Exit Sub

Err_test:

MsgBox Err.Description
Resume Exit_test

End Sub
Что я хочу сделать это .Чистый исключение передается в VBA и заявление об ошибках на уровне ВБА вступит в силу. На данный момент, в C# ловит исключение sqlexception, но на уровне ВБА он просто переходит как бы не произошла ошибка.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.
...