[C#] DLL 동적 로드해서 사용하기 by Sikuru

delegate int TestMethodDelegate(int a, int b);

// 리소스에서 byte[] 로 DLL을 끌어 오고...
Assembly loadAssembly = Assembly.Load(WindowsFormsApplication1.Properties.Resources.ClassLibrary1);

// Case 1. 모듈로 로드해서, 델리게이트로 바인드(?)
Module[] modules = loadAssembly.GetModules();
Type tx = modules[0].GetType("ClassLibrary1.Class1");
MethodInfo minfo = tx.GetMethod("TestMethod", BindingFlags.Public | BindingFlags.Static);
TestMethodDelegate TestMethod = (TestMethodDelegate)Delegate.CreateDelegate(typeof(TestMethodDelegate), minfo);
int testresult = TestMethod(5, 6);

// Case 2. 로드한 모듈에서 직접 Invoke
object[] parameters = { 4, 6 };
int testresult2 = (int)minfo.Invoke(minfo, parameters);

// Case 3. 어셈블리 자체에서 인스턴스 생성해서 Invoke
object instanceObject = loadAssembly.CreateInstance("ClassLibrary1.Class1");
int testresult3 = (int)instanceObject.GetType().GetMethod("TestMethod").Invoke(instanceObject, parameters);

내가 기억을 하기 위한 메모...

근데, 좀 더 깔끔히 로드할 수 있는 방법은 없으려나 ?
그보다, 단순히 컴파일 옵션 정도로 exe 단일 파일에다가 dll을 짱박아 주는 옵션 없나 ? ;;;

리소스로 때려 넣는건, 좀 압박인데... 메모리도 두배일테고... 방식도 이건 가히 어부바 (...)

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://whiteberry.egloos.com/tb/1953059 [도움말]

덧글

  • Harry 2009/10/13 02:00 # 답글

    오랜만에 들려봅니다~
    왠지 전문적인 내용이네요 ㅎㅎㅎ :)
    컴퓨터공학하시는 분들 보면 정말 신기합니다. 어떻게 저걸 이해하시는지.. =_= 저야 뭐 일반인의 한사람으로서 힘들이지않고 문명의 이기를 누릴수있는것에 감사하며 살고있지요
  • Sikuru 2009/10/13 07:57 #

    아하하~ 별거 아닌데요~ ^^;;;

    잘 지내셨나요~ =)
덧글 입력 영역