출처1 : http://sanaigon.tistory.com/155
asp.net 페이지에서 작업중에 C++로 만든 DLL 을 사용해야 하는 이슈가 생겼다.
기존 사용하던대로 그냥 DllImport 하려고하니 dll 파일을 찾을 수 없다고 나오더라.
관련 내용을 찾다보니 아래와 같은 내용을 찾았다.
· 프로세스의 현재디렉토리의 상위폴더
· 윈도우 시스템 디렉토리의 상위폴더(즉, 윈도우 디렉토리)
· 16비트 시스템 디렉토리의 상위폴더
· 윈도우 디렉토리의 상위폴더(일반적으로 볼륨의 루트)
· PATH환경변수에 포함되어 있는 디렉토리의 상위폴더이걸로 봤을 때 dll을 가져오는 경로를 잡아주면 될 것 같았고 아래와 같은 소스를 사용하여 해결하였다.
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetDllDirectory(string lpPathName);
[DllImport("kernel32", SetLastError = true)]
static extern IntPtr LoadLibrary(string lpFileName);
SetDllDirectory(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "bin\\");
SetDllDirectory 함수를 사용해서 DLL 사용할 경로를 추가해주고 사용하면 된다.
DllImport 시에 아래와 같이 폴더를 추가해 줄 수도 있다.
[DllImport("x64\\myModule64.dll",
EntryPoint = "myModule_function")]