2011-10-07 7 views
1

CodeDom을 사용하여 COM dll 파일을 참조하고 있습니다. 다음과 같이 DLL 파일 내의 함수는 매개 변수가이 DLL 파일을 비주얼 스튜디오 (된 CodeDom을 사용하지 않음), 다음과 같이 내가이 함수를 호출하여 직접 참조System.Array vs Byte [] CodeDom을 사용할 때

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

-와 솔루션이 아무런 문제없이 빌드 :

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이 type byte []를 ref System.Array 유형으로 변환 할 수 없다는 오류를 표시합니다.

내 질문 - 마지막으로 : 바이트 배열을 System.Array를 입력하면 어떻게 변환 할 수 있습니까? 온라인에서 기사를 찾을 수 없습니다.

도움 주셔서 감사합니다. 이 참조에 의해 전달 배열을 원하는 경우

+0

@BenVoigt합니다. –

답변

2

, 당신은 할 것 : 올바른 형식으로 업데이트

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

아니요, 다음 오류가 표시됩니다. 'Argumenet 2 :'ref byte [] '에서'reef System.Array '로 변환 할 수 없습니다. –

+0

물론 "ref System.Array"라고해야합니다. 혼란스러워서 죄송합니다. –

+0

@ 에반 : 그런 다음'Array a = b; dll_obj_reference.Foo ("data", ref a); if (a! = b) {/ * DLL 내부에 생성 된 새로운 배열로부터 요소를 복사하는 방법을 알아 낸다. * /}' –

관련 문제