C#팁

허접한 dllImport tip 입니다. 비니픽 평점: 없음 조회: 4251
안녕하세요~

저는 이제 막 개발을 시작한 개발자 입니다.

C#으로 개발을 하면서 최근 dllimport 를 사용할 때가 있어서 엄청 당황하다가..
아래와 같이 해결 했습니다.

도움이 될수 있을까해서 허접하지만 올려봅니다. 더 좋은 방법이 있다면 고수님들의 답변 기다리겠습니다.

[DllImport("kernel32.dll", EntryPoint = "LoadLibrary")]
private extern static IntPtr LoadLIbrary(string libraryName);

[DllImport("kernel32.dll", EntryPoint = "GetProcAddress", CharSet = CharSet.Ansi)]
private extern static IntPtr GetProcAddress(IntPtr hwnd, string ProcedureName);

[DllImport("kernel32.dll", EntryPoint = "FreeLibrary")]
private extern static bool FreeLibrary(IntPtr hMoudle);

[UnmanagedFunctionPointer(CallingConvention.StdCall)]
private delegate uint AAAAA (int a, int b, int c)

private static AAAAA BBBBB;

static public bool [사용함수] (int pid)

try

           Module = LoadLIbrary([DllPath]);
           IntPtr pFuncAddr = IntPtr.Zero;
           pFuncAddr = GetProcAddress(Module, CCCCC);  //내부함수 주소 호출
           BBBBB = (AAAAA)Marshal.GetDelegateForFunctionPointer(pFuncAddr, 
                          typeof(AAAAA)); 

           BBBBB(a, b, c);
}
catch (exception ex)
{
    messagebox.Show(ex.message, "Error");
}
finaly
{
    FreeLibrary (Module);
}

해당 방식은 kernel32 에 있는 LoadLibrary를 사용하여 [DllPath] 에 있는 해당 dll을 로드 하고
dll 내부에 있는 함수 (CCCCC) 를 호출하여 해당 주소를 BBBBB에 전달 하는 형식으로 사용합니다.
그냥 DllImport를 사용할 때는 Free 를 해줄 필요가 없지만.. 이때는 꼭 Free를 해줘야 하는것 같습니다.
저는 포인터를 사용해서 Unsafe에서 작업하긴 했지만, 기본적인 로직에선 Unsafe가 필요 없을듯 하네요..

허접한 TIP이지만 도움이 많이 되셨으면 좋겠습니다~~

수고하세요~

태그 : dllimport, kernel32
작성자 정보
비니픽
Level 5
 [EXP.14/16]

메일:  비공개
글등록 +12 36 덧글등록 +3 18
자기소개
안녕하세요~ 이제 시작하는 개발자 입니다.
글 공유하기 |
  tweet facebook
2014-11-04 오후 5:27:59
나도한마디
사용자
HOONS            [2014-11-04]
Level 99
 [EXP.만랩]
FreeLibrary 가 메모리 해제 함수인가요?
사용자
비니픽            [2014-11-05]
Level 5
 [EXP.14/16]
DLL 파일 Load 한걸 풀어주는 함수로 알고 있습니다.

그러면서 메모리가 해제 되는걸로 알고 있구요~
글리스트
딕션어리 vs 데이터 테이블(값이 자주 변경)[1]  레미콘
C#으로 시리얼통신을 해보자! 시리얼 통신의 원리부터 구현까지[9] 파일첨부 아이프리드
트리뷰 + - 버튼을 이미지로 바꿀 수 있나요 ?[1]+1  훈스훈스훈스
안녕하세요. PartialView에 대한 질문 드립니다.[3] 파일첨부 노찬이
두 가지 간단한 질문..[2]+1  븅멍뭉친구
OS X의 파일명의 한글 자모음이 분리되어 보이는 경우[4]  sa2랑
달력컨트롤 예시 입니다.[4] 파일첨부 방랑개죽
WinForm 투명 컨트롤 ~ 작은 경험 하나 공유합니다.[2]+1  Booh
Hoons.net에 게시물에 소스코드를 이쁘게 넣고 싶다!! 하시는분들...[5]  아이프리드
모든 개발자들을 위한 비주얼 스튜디오[5]+7  sky
 ★현재글->   허접한 dllImport tip 입니다. [1]+1  비니픽
Ibatis.Net 트랜젝션 문제 해결하기 [3]+1  호랭이
MVC.NET 을 제외한 C# 프로젝트 내에서 Razor를 이용하여 Html 소스 가져오기[1]  호랭이
Reactive Extensions라이브러리 2 -event thread  Lookvv
C# 람다식(Lambda __EXPRESSION__) - 문형식 람다식 예제[1]  오엔제이
Reactive Extensions라이브러리 1 -Time관련[1]  Lookvv
zero padding, 숫자 앞에 0 추가하여 자릿수 맞추기 예) 00099[1]  안떠니
string 에서 ESC 문자 제거하기  안떠니
C# 디버그 레벨별로 콘솔창에 띄우는 코드[1]  커니커니
C# 윈폼도 띄우고 콘솔도 띄우기  커니커니
class전체에 exception 처리를 할 수 있을까요??[5]  꿀물이필요해