【问题标题】:System.Array vs Byte[] When using CodeDomSystem.Array vs Byte[] 使用 CodeDom 时
【发布时间】:2011-10-07 01:08:03
【问题描述】:

我正在使用 CodeDom 引用一个 COM dll 文件。 dll文件中的函数参数如下:

Public Function Foo(fooString As String, fooByte() As Byte) 
End Function

当这个 dll 文件被 Visual Studio 直接引用(不使用 CodeDom)时,我调用这个函数如下 - 并且解决方案构建没有问题:

Byte[] b = File.ReadAllBytes("Test.exe");
DllName.DllClass dll_obj_reference = new DllName.DllClass();

dll_obj_reference.Foo("data", b);

注意: 虽然我正在向函数发送一个字节数组(根据 VB6 的要求),但 Visual Studio 实际上要求输入类型System.Array。无论出于何种原因,解决方案仍然可以正常运行,我可以毫无问题地调用函数Foo

但是,通过 CodeDom 完成这一切,我就没有那么幸运了。我将 interop.DllName 添加为对生成项目的引用,并以相同的方式调用。不过,这一次,CodeDom 吐出一个错误,说它无法将类型 byte[] 转换为类型 ref System.Array。

所以,我的问题 - 最后: 如何将上面显示的字节数组转换为 System.Array 类型?我在网上找不到任何文章。

感谢您的帮助!

【问题讨论】:

  • @BenVoigt 已更新为正确的格式。

标签: c# arrays codedom


【解决方案1】:

如果它想要一个通过引用传递的数组,你会这样做:

dll_obj_reference.Foo("data", ref b);

【讨论】:

  • 不,我收到一条错误消息:'Argumenet 2: Cannot convert from 'ref byte[]' to 'reef System.Array'
  • 当然应该说“ref System.Array”。很抱歉有任何混淆。
  • @Evan:那就试试Array a = b; dll_obj_reference.Foo("data", ref a); if (a != b) { /* figure out how to copy the elements from the new array created inside the DLL, given to you as a */ }
【解决方案2】:

您可以将字节数组转换为 System.Array

Byte[] b = File.ReadAllBytes("Test.exe");

Array barr = (Array)b;

DllName.DllClass dll_obj_reference = new DllName.DllClass();

dll_obj_reference.Foo("data", barr);

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 2013-06-30
    相关资源
    最近更新 更多