2010-05-21 6 views
0

.NET에서 InterOp Win32 코드 (관리되지 않는 Win32 DLL과 EXE)가 필요합니다. 런타임시 Win32 서명의 데이터 형식을 알고 Win32 비 관리 코드 (DLL 내 보낸 함수)를 호출하고 런타임에 해당 형식에 따라 데이터를 전달해야합니다.Win32 코드 Interop에 .NET이 지원됩니까?

COM의 경우 COM 비 관리 코드를 tlbimp.exe를 사용하여 관리되는 어셈블리로 변환하고 리플렉션 API를 사용하여 이러한 관리되는 유형 (관리되지 않는 유형을 tlbimp를 사용하여 관리로 변환)으로 작업 할 수 있습니다.

.NET Framework에서 Win32의 관점에서 동일한 기능을 어떻게 얻을 수 있습니까?

MS가 수출 테이블 읽기 API를 제공했지만 Win32 비 관리 코드의 interop에 대한 정확한 API를 찾을 수 없다는 것을 알고 있습니다.

+0

답변 옆의 체크 표시에 유의하십시오. 이것이 귀하의 질문에 가장 적합한 답변을 수락하는 방법입니다. 또한 위아래 화살표에 주목하십시오. 이것은 좋은 질문 및 답변을 투표하고 나쁜 투표를 싫어하는 사람들을위한 것입니다. – Dinah

+0

위쪽 또는 아래쪽 화살표는 무엇을 보여줍니다 ..? – Usman

+0

각 질문 및 답변 옆에 숫자가 있습니다. 좋은 사용자라고 생각합니다. 숫자 위에는 회색 위쪽 및 아래쪽 아래쪽에 있습니다. 질문이나 답변이 도움이된다면 위쪽 화살표를 클릭하십시오. 특히 도움이되지 않는다면 아래쪽 화살표를 클릭하십시오. 질문 할 때 모든 답에는 체크 표시가 있습니다. 귀하의 질문에 가장 잘 부응하는 답을 위해 체크 표시를 클릭하여 가장 좋은 답으로 선택할 수 있습니다. 이는 또한 미래의 시청자가 이와 비슷한 문제를 겪고있는 사람들이 이러한 대답을 통해 개인적으로 도움을 얻을 수 있도록 도와줍니다. – Dinah

답변

1

예, 네이티브는 Win32 코드 또는 C 형 기능을 수출 어떤 DLL과 상호 운용성 수 System.Runtime.InteropServices의 서비스를 사용 http://www.pinvoke.net/

를보십시오.

+0

System.Runtime.InteropServices를 사용하면 TypeLib 또는 다른 유형의 유형을 추출하여 추출 할 수 있습니다 (예 : 바이너리로 정의 된 전체 서명을 추출 할 수 있음)하지만 런타임에 유형을 알고 런타임시 해당 메소드를 호출하려면 REFLECTIONS가 필요합니다. Win32의 경우 내보내기 테이블과 PE (Plain Win32 DLL)의 헤더를 읽어서 형식과 서명을 추출 할 수 있습니다. 여기에서 리플렉션을 사용하는 COM의 경우와 마찬가지로 런타임에 해당 메서드를 호출합니다. 그러나 리플렉션은 관리되는 어셈블리에만 적용됩니다. 나에게 일반 Win32 DLL을 관리되는 어셈블리로 변환 할 수 없습니다. – Usman

+0

아니요, 원시 코드에 충분한 메타 데이터가 없으므로 자동으로 p/invoke 선언을 생성 할 수 없습니다. pinvoke.net에 대한 링크는 많은 Win32 API에 대한 준비된 interop 선언을 제공합니다. Win32 API가 아닌 경우에도 같은 패턴을 따를 수 있지만 수동으로해야합니다. –

+0

나에게 PInvoke는 관리되지 않는 세계로의 전화 전달자 일 뿐이며 그 밖의 일은하지 않는다. 런타임에 유형 검사가 없습니다. 그렇지 않습니까? – Usman

관련 문제