当尝试使用包装第三方接口的接口代理时,我遇到了AccessViolationException。当发出的代码将“ arg”类型的调用arg数组写回到原始arg时,将引发异常。大概是因为第三方组件给出了“仅”参数,因此不应将其写入。
所以,我想知道是否可以将DynamicProxy配置(或增强/破解)为不写一些参数?也许通过配置自定义代码发射器之类的东西...
还是在框外思考,在运行时将[InAttribute]应用到第三方接口是否可行(假设可以将DynamicProxy配置为遵守该属性)?
其他可能有用的信息:
示例代码:
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();
}
}