我正在使用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类型?我在网上找不到任何文章。
感谢您的帮助!
答案 0 :(得分:2)
如果它想要一个通过引用传递的数组,你可以这样做:
dll_obj_reference.Foo("data", ref b);
答案 1 :(得分:0)
您可以将字节数组转换为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);