Почему я могу создать новое на интерфейсе Interop Assembly? [Дубликат]

Самое простое решение - создать функцию JavaScript и вызвать его для обратного вызова Ajax success.

function callServerAsync(){
    $.ajax({
        url: '...',
        success: function(response) {

            successCallback(response);
        }
    });
}

function successCallback(responseObj){
    // Do something like read the response and show data
    alert(JSON.stringify(responseObj)); // Only applicable to JSON response
}

function foo(callback) {

    $.ajax({
        url: '...',
        success: function(response) {
           return callback(null, response);
        }
    });
}

var result = foo(function(err, result){
          if (!err)
           console.log(result);    
}); 
161
задан Jon Skeet 3 October 2014 в 15:21
поделиться

3 ответа

138
ответ дан Community 28 August 2018 в 05:37
поделиться

Между вами и Майклом вы почти собрали части. Я думаю, что так оно и работает. (Я не писал код, поэтому я мог бы немного неправильно его сформулировать, но я уверен, что так оно и есть.)

Если:

  • вы «новый» тип интерфейса, а
  • тип интерфейса имеет известный класс, а
  • вы используете функцию «no pia» для этого интерфейса

, тогда код генерируется как (IPIAINTERFACE) Activator.CreateInstance (Type.GetTypeFromClsid (GUID OF COCLASSTYPE))

Если:

  • вы являются «новыми» типа интерфейса, а
  • тип интерфейса имеет известный класс, а
  • вы НЕ используете функцию «no pia» для этого интерфейса

, тогда код генерируется так, как если бы вы сказали «новый COCLASSTYPE ()».

Джон, не стесняйтесь меня или Сэма напрямую, если у вас есть вопросы по этому поводу. FYI, Сэм является экспертом в этой функции.

60
ответ дан Eric Lippert 28 August 2018 в 05:37
поделиться

Просто добавьте немного подтверждения в ответ Майкла:

Следующий код компилируется и запускается:

public class Program
{
    public class Foo : IFoo
    {
    }

    [Guid("00000000-0000-0000-0000-000000000000")]
    [CoClass(typeof(Foo))]
    [ComImport]
    public interface IFoo
    {
    }

    static void Main(string[] args)
    {
        IFoo foo = new IFoo();
    }
}

Вам нужны как ComImportAttribute, так и GuidAttribute

Также обратите внимание на информацию, когда вы наводите курсор мыши на new IFoo(): Intellisense правильно подбирает информацию: Nice!

27
ответ дан Rasmus Faber 28 August 2018 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: