2013-03-12 2 views
4

Silverlight 5 프로젝트에 내 관리되지 않는 C++ dll을 사용해야합니다.Silverlight 5 프로젝트에 관리되지 않는 C++ dll을 추가하는 방법

내가 사용하여 사용할 수 오전으로 같이 DllImport 즉

[DllImport(@"D:\myLib\Debug\myLib.dll")] 
    static extern int add(IntPtr ptr); 

내가 같이 DllImport에 absoulte 경로를 metioned로 그것은 잘 작동합니다. 하지만 내 문제는, 상대 경로를 사용하고 싶습니다.

내 Silverlight 5 프로젝트에 관리되지 않는 C++ DLL을 추가하고 거기에서 경로를 지정해야합니다. 지난 2 일 동안이 문제에 대한 해결책을 찾지 못했습니다.

아래에서 언급 한 하나의 관련 링크를 찾았지만 도움이되지 않습니다.

http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.dllimportattribute.dllimportattribute.aspx

그것은 관리되는 어셈블리에 관리되지 않는 DLL을 포함하는 방법을 제안으로

. 이 방법을 시도했지만 "BadImageException"이 나타납니다.

나를 위해 정말 급한 일이므로이 문제에 관해서 제안하십시오.

감사합니다,

비핀

+0

DllImportAttribute **는 관리되지 않는 라이브러리 **를 Silverlight 응용 프로그램에 포함하지 않습니다. (절대적으로 그런 종류의 절대 경로는 피하십시오). 해당 라이브러리에 ** 참조를 추가하기 만하면 ** 별도로 다운로드하여 설치해야합니다 **. –

+0

SL5 응용 프로그램은 승격 된 권한으로 실행 중입니까? 그렇지 않은 경우 관리되지 않는 DLL을 사용할 수있을 것으로 기대하지는 않습니다. –

+0

[BadImageFormatException] (http://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspx) 페이지에는이 오류가 발생할 수있는 이유를 설명하는 '설명'섹션이 있습니다.나는 그들을 통해 가서 그 문제를 해결하는 데 도움이되는지 확인합니다. – SwDevMan81

답변

1

실버 5 릴리스 후보가 공개되었을 때, 내가 관리되지 않는 비 시스템 DLL을 번들의이 문제를 처리하기위한 몇 가지 지원 방법을 만들어 :의 실버 라이트 5 RC 응용 프로그램과 함께. Microsoft는 Silverlight 5 RTM의 번들링 문제를 해결하기위한 지원을 추가하지 않았으므로이 솔루션은 여전히 ​​유효합니다.

내가하는 일은 기본적으로 관리되지 않는 DLL을 리소스 파일로 묶는 것입니다. 수동으로 호출되는 헬퍼 메소드를 통해. 응용 프로그램 시작 이벤트 처리기에서 리소스가 디스크의 미리 정의 된 위치에 복사됩니다. 이 위치는 실행 중 시스템 PATH에도 포함됩니다.

높은 신뢰성이 필요합니다 (물론).

이 솔루션에 대한 자세한 내용은 this 블로그 게시물을 참조하십시오.

샘플 테스트를 포함하여이 솔루션과 관련된 모든 코드는 Github에서 찾을 수 있습니다.

사이먼 Mourier 아래의 코멘트에 지적한 바와 같이 UPDATE

, 하나의 옵션은 LoadLibrary 기능 후 의 Kernal32를 호출하여 관리되지 않는 DLL을 메모리로로드 (및 응용 프로그램 종료시 해제)하는 것 DLL이 자원에서 압축 해제되었습니다. Silverlight에 대한이 접근법은 블로그 게시물 this에 자세히 설명되어 있습니다.

+0

P/Invoke 호출 바로 전에 LoadLibrary 함수를 사용하면 (올바른 경로를 가지고 있으므로) 시스템 PATH를 변경하지 않아도됩니다. DLL이 프로세스에서로드되면 DllImport가 성공해야합니다. 그것은 표준 .NET에서 작동하는 데 사용되었지만 SL에서 테스트하지 않았습니다. http://msdn.microsoft.com/en-us/library/windows/desktop/ms684175.aspx –

+0

@SimonMourier에 대한 의견을 보내 주셔서 감사합니다. 이 옵션에 대해서는 생각해 보지 못했지만 실행 가능해 보입니다. 간단한 인터넷 검색 결과 다른 누군가가 SL에서이 접근 방식을 실제로 성공적으로 수행 한 것으로 나타났습니다. 이 새로운 정보로 답변을 업데이트하겠습니다. –

관련 문제