FireBreath Framework를 사용하여 브라우저 플러그인을 만들고 있습니다. 대부분의 논리는 C#으로 작성되었으며 브라우저에서 호출하기 위해 C++ 래퍼를 만들었습니다. 브라우저는 C# 프로젝트의 실제 로직을 호출하는 "proxy"Managed C++ 코드를 호출하는 C++ 네이티브 코드를 호출합니다.C++과 C# 사이의 사이드 종속성
그래서 나는 3 DLL을 가지고 관리되는 C++에 따라
- 헤드 네이티브 C++ DLL을;
- C#에 종속 된 Managed C++;
- C# dll에는 주 논리가 들어 있습니다. 사용자 디렉토리에 설치
모든 3 DLL은 :
문제는 C#을 DLL을로드하지 않는 브라우저입니다 (C \ 사용자 1.0.0.0 \의 AppData \ 로밍 \ MyCompany \ MyApp를 \\). 사이드 바이 사이드 매니페스트를 사용하여 종속성을 선언합니다.
는 I 어셈블리 선언 별도 매니페스트 파일을 만들려고 :<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="MyAssembly" processorArchitecture="*" type="win32" version="1.0.0.0"/>
<file name="FirstDependency.dll"/>
<file name="SecondDependency.dll"/>
</assembly>
및 헤드 DLL (네이티브 C++)이 종속성에 링크가 추가
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity name="MyAssembly" processorArchitecture="*" type="win32" version="1.0.0.0"/>
</dependentAssembly>
</dependency>
</assembly>
또한 I는하려 head dll (Native C++)에서 직접 종속성 선언 :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<file name="FirstDependency.dll"/>
<file name="SecondDependency.dll"/>
</assembly>
종속적 인 d 의 #pragma 지시어를 사용하여 LLS는 :
#pragma comment(linker, "\"/manifestdependency:type='win32' name='FirstDependency' version='1.0.0.0' processorArchitecture='X86' language='*'\"")
#pragma comment(linker, "\"/manifestdependency:type='win32' name='SecondDependency' version='1.0.0.0' processorArchitecture='X86' language='*'\"")
내가 종속성 워커를 사용하여 종속성을 확인하고 그것을 관리 C++와 C#과 어떤 종속성이 존재하지 않습니다 확인했다.
플러그인이 head dll (Native C++)에 액세스 할 수 있으며 Managed C++에서 Managed C++이 C# dll - 호출을 호출 할 때 C# 어셈블리를 찾을 수없는 경우에도 Managed C++를로드합니다.
브라우저 응용 프로그램 (firefox.exe 또는 chrome.exe)과 동일한 디렉토리에 C# dll을 넣으면 작동합니다.
Managed C++ & C#에서 Side By Side 종속성이 작동하지 않는 것 같습니다.
내 플러그인에 종속 DLL을 어떻게로드 할 수 있습니까?
FireBreath IRC 방에서 이에 관해 문의하십시오. 불행히도, 나는 이것을 한 번도 해 본 적이 없기 때문에 나는 모릅니다. 플러그인이 되어도 다른 응용 프로그램과 전혀 다르지 않습니다. 단, 응용 프로그램 자체가 아닌 다른 DLL을로드하는 DLL 만 수정할 수 있다는 점만 다릅니다. – taxilian