gpt4 book ai didi

C# + COM,修改参数中的数组

转载 作者:行者123 更新时间:2023-11-30 18:07:47 26 4
gpt4 key购买 nike

我有一个 C# 中的 COM 对象和一个 Silverlight 应用程序(升级权限),它是此 COM 对象的客户端。

COM 对象:

[ComVisible(true)]
public interface IProxy
{
void Test(int[] integers);
}

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class Proxy : IProxy
{
[ComVisible(true)]
public void Test(int[] integers)
{
integers[0] = 999;
}
}

银光客户端:

dynamic proxy = AutomationFactory.CreateObject("NevermindComProxy.Proxy");

int[] integers = new int[5];
proxy.Test(integers);

我期望整数 [0] == 999,但数组是完整的。

如何让COM对象修改数组?

UPD适用于非 silverlight 应用程序。 Silverlight 失败。如何修复 silverlight?

最佳答案

简短的回答是您需要通过 ref 传递数组(请参阅示例上方的 AutomationFactory 中的注释 [数组在 C# 中按值传递]) - 那么问题是,SL 会因参数异常而呕吐当您调用 proxy.Test(ref integers) 时(我不知道为什么)。解决方法是,如果方法通过 ref 获取对象,SL 将通过 ref 传递数组,所以这可行...

[ComVisible(true)]
public interface IProxy
{
void Test( ref object integers);
}

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class Proxy : IProxy
{
[ComVisible(true)]
public void Test(ref object intObj)
{
var integers = (int[])intObj;
integers[0] = 999;
}
}

并使用 SL 代码添加 ref,如:

dynamic proxy = AutomationFactory.CreateObject("NevermindComProxy.Proxy");

var integers = new int[5];
proxy.Test( ref integers);

从调用者或接口(interface)定义中删除引用,它不会更新数组。

关于C# + COM,修改参数中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3750775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com