Я получаю исключение AccessViolationException при попытке использовать прокси-интерфейс интерфейса, который оборачивает сторонний интерфейс. Исключение выдается, когда выданный код записывает массив аргументов вызова обратно в исходный аргумент типа arg «ref». Предположительно, это связано с тем, что сторонний компонент дал параметр «только», и его нельзя записывать в.
Итак, мне было интересно, можно ли настроить DynamicProxy (или улучшить / взломать) на , а не записать несколько аргументов? Может быть, путем настройки собственного генератора кода или чего-то еще ...
Или, не задумываясь, сработает ли применение [InAttribute] во время выполнения к стороннему интерфейсу (при условии, что DynamicProxy можно настроить для соответствия этому атрибуту)?
Другая, может быть полезная информация:
- Сторонний интерфейс не использует ключевое слово «in» или InAttribute в аргументе «ref» обидчика.
- Я пытаюсь использовать интерфейсные прокси, созданные с целью
Пример кода:
namespace third_party
{
public class IService
{
public int DoSomething(ref Guid guid);
}
}
namespace domain_ns
{
public class ServiceImpl : IService
{
public int DoSomething(ref Guid guid) { return 0; }
}
public static void main(string[] args)
{
...
var proxy = proxyGen.CreateInterfaceProxyWithTarget(..., new ServiceImpl(), ... );
third_party.AddService(proxy);
// Indirectly causes proxy.DoSomething() to be called.
// Throws an AccessViolationException :(
third_party.Go();
}
}