我正在使用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完成这一切时,我就不那么幸运了。我添加了互操作。DllName作为对生成的项目的引用,我以同样的方式调用。但是这一次,CodeDom返回了一个错误,说它不能将类型byte[]转换为类型ref System.Array。
所以,我的问题-最后:如何将上面显示的字节数组转换为System.Array类型?我在网上找不到任何文章。谢谢你的帮助!
如果它想通过引用传递数组,您可以这样做:
dll_obj_reference.Foo("data", ref b);
可以将字节数组强制转换为System。数组
Byte[] b = File.ReadAllBytes("Test.exe");
Array barr = (Array)b;
DllName.DllClass dll_obj_reference = new DllName.DllClass();
dll_obj_reference.Foo("data", barr);