Как вызвать ошибку понятную для COM?

168
09 июня 2019, 23:00

Как реализовать вызов ошибки, как com-объект?

Сейчас из JavaScript кода, создается:

var customObject = new ActiveXObject("NAMESPACE.CLASS_NAME");
customObject.GETWRAPPER.CallMethodHttpCom("METHOD_NAME");

Так вызывается C# метод. Из этого метода вылетает ошибка с каким-то сообщением. Мне необходимо, что бы при перехвате try..catch(error) из JS, я смог увидеть это своё сообщение.

Сейчас же я вижу:

Т.е. не то сообщения что я вызывал в C#.

Мне подсказали смотреть в сторону IUnknown, но к моему большому сожалению, не могу понять что я там должен увидеть.

Подскажите как реализовать или где посмотреть примеры для подобных проблем?

Answer 1

У меня вот так работает

C#:

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
namespace AxTest
{
    [ProgId("AxTest.Class1")]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [Guid("177E405F-0C29-4FB1-B55A-D5324EDE1E97")]
    [ComVisible(true)]
    public class Class1 
    {
        public string Test(string x)
        {
            throw new Exception("Something bad happened!");
        }        
    }
}

JS:

<html>
   <head>
          <title>ActiveX test</title>
   </head>
   <body>
        <script type="text/jscript">
            try {
                var customObject = new ActiveXObject("AxTest.Class1");
                var res = customObject.Test("Foo");
                alert(res);
            } catch (ex) {
                alert("Exception: " + ex.message);
            }

        </script>
   </body>
</html>

Судя по сообщению, у вас исключение завернуто в TargetInvocationException. Чтобы получить нормальное сообщение об ошибке, вам надо его перехватывать и пробрасывать как свое исключение. Потому что в JS не достать InnerException.

READ ALSO
Int и bool из С++. Как портировать на C#?

Int и bool из С++. Как портировать на C#?

У меня есть вот такая строчка в С++ коде: sects[low]bound = low

138
Как правильно отправить List&lt;string[]&gt; через json

Как правильно отправить List<string[]> через json

Подскажите пожалуйста! Имеется контроллер на aspnet в котором получаю список из базы данных, далее этот список надо отправить на мобильное приложение

156
Создание отчетов в reportviewer из хранимой процедуры

Создание отчетов в reportviewer из хранимой процедуры

Использую SQL Server 2014, VS 2017 Суть в том, что нужно по параметрам создавать отчеты, например, вывести какие-нибудь записи за указанный период времениЯ...

131
WPF приложение не видит новое окно

WPF приложение не видит новое окно

Я создал новое окно и хочу прописать показ формы через обработчик событий

111