使用 CodeDom 时的 System.Array 与 Byte[]

发布于 2024-12-08 17:43:44 字数 788 浏览 0 评论 0原文

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

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

当 Visual Studio 直接引用此 dll 文件(不使用 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 类型?我在网上找不到任何文章。

感谢您的帮助!

I am referencing a COM dll file using CodeDom. The function within the dll file has parameters as follows:

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

When this dll file is referenced directly by Visual Studio (Not using CodeDom), I call this function as follows - and the solution builds with no problems:

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

dll_obj_reference.Foo("data", b);

NOTE:
Although I am sending a byte array to the function (as requested by VB6), Visual Studio is actually asking for type System.Array. For whatever reason, the solution still builds fine, and I am able to call the function Foo with no problems at all.

However, I am not so lucky when doing this all through CodeDom. I add the interop.DllName as a reference to the generated project, and I call just the same way. This time, though, CodeDom spits back an error saying that it cannot convert type byte[] to type ref System.Array.

So, my question - finally:
How can I convert the byte array shown above to type System.Array? I cannot find any articles online.

Thank you for any help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

牵强ㄟ 2024-12-15 17:43:44

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

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

If it wants an array passed by reference, you'd do:

dll_obj_reference.Foo("data", ref b);
心碎无痕… 2024-12-15 17:43:44

您可以将字节数组转换为 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);

You can cast byte array to 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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文