2011-12-26 3 views
0

리플렉션을 사용하여 vb.net에서 동적으로 DLL (어셈블리가 아니라 관리되지 않는 COM 개체 모델)을 동적으로 호출하려고합니다.vb.net에서 리플렉션을 통해 비 어셈블리 (관리되지 않는) dll의 메서드 호출?

.net 어셈블리 인 dll에서 메서드를 호출하는 여러 가지 방법을 보았습니다. 그러나 user32.dll 또는 winmm.dll과 같은 DLL 내부에서 메서드를 동적으로 호출하는 방법을 찾지 못했습니다. 나는 이것이 후기 바인딩이라고 믿는가?

다른 기능을 많이 사용하기 위해 외부 라이브러리에 의존하는 언어를 작성 중이므로 내가 묻는 이유가 있습니다.

Declare Function mciSendStringA using "winmm.dll" (strCommand As String, strReturn As String, returnLength As Integer, blah As Integer) As Integer 

Declare Function WriteConsoleA using "kernel32.dll" (hConsoleOutput As Integer, lpBuffer As String, numberofcharstowrite as Integer, lpReserved as Integer) As Boolean 

내가 winmm.dll에서 mciSendString 호출에 대한 통역을 구축, 어떻게이 문제를 처리하기 위해 반사를 사용할 수 있습니다

예 (이 언어에 내가 짓고 있어요)

? 사용자가 원하는 dll/method를 참조 할 수있게하고 싶습니다.

올바른 지침을 얻을 수 있습니까? 어쩌면 떨어져서 이해할 수있는 vb.net 코드도 있을까요?

+0

한주의 사항, 세부 사항 당신을 먹을 것이다. TypeBuilder.DefinePInvokeMethod()는 유용합니다. –

답변

0

비 관리 Win32 기본 라이브러리에는 리플렉션을 사용하지 않습니다.

대신로드하고 관리되지 않는 함수에 대한 포인터를 검색하여 주소로 호출합니다. 이것은 C#에서이 작업을 수행하는 방법이다 : 당신의 자신의 PInvoke 마샬을 구현하기 위해 노력하고

http://blogs.msdn.com/b/jonathanswift/archive/2006/10/03/dynamically-calling-an-unmanaged-dll-from-.net-_2800_c_23002900_.aspx

+0

모듈 핸들을'SafeHandle' 타입 ('IntPtr' 대신)으로 랩핑하고'ReleaseHandle'이'FreeLibrary'를 호출하는 것이 낫습니다. – bobbymcr

+0

사실,이 기사에서는 예제를 보여줍니다. http://msdn.microsoft.com/en-us/magazine/cc163716.aspx – bobbymcr

+0

Thanks Wiktor. 나는이 기사에서 제시 한 C# 코드를 vb.net으로 변환했으며 꽤 잘 작동한다. – Dominick

관련 문제