성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>C# - chromiumembedded 사용</h1> <p> WebKit이 Java Applet과의 충돌을 일으키므로,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C# - WebKit.NET 사용 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/1456'>http://www.sysnet.pe.kr/2/0/1456</a> </pre> <br /> 다음 대안을 찾아보았습니다. 오호~~~ 마침 Chromium을 내장 컨트롤로 감싸주는 프로젝트가 있군요. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > chromiumembedded ; <a target='tab' href='http://code.google.com/p/chromiumembedded/'>http://code.google.com/p/chromiumembedded/</a> </pre> <br /> C/C++은 당연히 chromiumembedded 프로젝트 자체가 지원되겠고, 위의 사이트에서 "External Projects"를 보면 .NET, Mono, Delphi, Java, Python에서 추가지원을 하고 있으니 왠지 WebKit보다 더욱 신뢰가 갑니다. ^^<br /> <br /> 그럼, .NET 에 대한 지원을 한번 볼까요?<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > CefSharp - Embedded Chromium for .Net ; <a target='tab' href='https://github.com/chillitom/CefSharp#readme'>https://github.com/chillitom/CefSharp#readme</a> </pre> <br /> CefSharp-master.zip 소스 코드는 Visual Studio 2012를 지원하지 않으므로 제 경우에는 별도로 브랜치된 다음의 버전을 다운로드를 받았습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > .Net binding for the Chromium Embedded Framework - vs2012 branch ; <a target='tab' href='https://github.com/perlun/CefSharp/tree/vs2012'>https://github.com/perlun/CefSharp/tree/vs2012</a> </pre> <br /> 압축해제하고 Visual Studio 2012에 로드하면 다음과 같은 프로젝트들이 보입니다.<br /> <br /> <ul> <li>CefSharp</li> <li>CefSharp.Example</li> <li>CefSharp.Test</li> <li>CefSharp.WinForms</li> <li>CefSharp.WinForms.Example</li> <li>CefSharp.WinForms.Test</li> <li>CefSharp.Wpf</li> <li>CefSharp.Wpf.Example</li> <li>CefSharp.Wpf.Test</li> </ul> <br /> 이 중에서 테스트 프로젝트 제외하고, WinForm으로 한정지으면 다음과 같이 정리됩니다.<br /> <br /> <ul> <li>CefSharp</li> <li>CefSharp.Example</li> <li>CefSharp.WinForms</li> <li>CefSharp.WinForms.Example</li> </ul> <br /> 다시 예제 프로젝트를 제외하면 최종적으로 다음과 같이 정리됩니다.<br /> <br /> <ul> <li>CefSharp: C++/CLI, libcerf.dll을 매개로 Chromium과 연동</li> <li>CefSharp.WinForms: C++/CLI, CefSharp 프로젝트를 매개로 윈폼용 WebView 컨트롤 구현</li> </ul> <br /> 그리고 Chromium 관련 네이티브 DLL 들이 압축 파일의 .\CefSharp-vs2012\Release 폴더에 있는데 이 DLL들이 EXE와 함께 배포되어야 합니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 자... ^^ 그럼 이제 x86 Windows Forms 프로젝트를 하나 생성시키고, CefSharp의 chromium 관련 네이티브 DLL 들을 프로젝트에 복사하고 Embed시킵니다.<br /> <br /> <img alt='cef_sample_1.png' src='/SysWebRes/bbs/cef_sample_1.png' /> <br />(주의: locales 폴더 내의 파일들도 "Copy if newer"로 설정)<br /> <br /> 편의상, 프로젝트 설정에서 "Debug" / "Enable the Visual Studio hosting process"옵션을 해제합니다.<br /> <br /> 그 후로는 일반적인 컨트롤 사용하는 것과 별반 다르지 않게 제어할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > using System; using System.ComponentModel; using System.Windows.Forms; using CefSharp; using CefSharp.WinForms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } WebView _webView; BrowserSettings _settings = new BrowserSettings(); private void Form1_Load(object sender, EventArgs e) { _webView = new WebView("http://www.sysnet.pe.kr", _settings); this.Controls.Add(_webView); _webView.Dock = DockStyle.Fill; } } } </pre> <br /> 그럼, 다음과 같이 잘 실행됩니다. ^^<br /> <br /> <img alt='cef_sample_2.png' src='/SysWebRes/bbs/cef_sample_2.png' /> <br /><br /> URL을 전달하는 것은 생성자에서도 가능하지만, 별도로 Load 메소드가 제공되는데요. 주의할 점은 반드시 "초기화"된 후에만 정상적으로 호출할 수 있으므로 다음과 같은 식으로 초기화 되었음을 확인해 주어야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > if (_webView.IsBrowserInitialized == true) { _webView.Load("http://www.sysnet.pe.kr"); } </pre> <br /> <a target='tab' href='http://www.sysnet.pe.kr/bbs/DownloadAttachment.aspx?fid=821&boardid=331301885'>첨부된 파일은 위의 예제를 포함</a>합니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 그 외에, JRE만 설치하면 Java Applet도 잘 동작합니다. Flash의 경우에는 아래의 경로에서 배포되는 "Flash Player 11 for Other Browsers"를 설치하는 경우 역시 잘 동작합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 다른 버전의 Adobe Flash Player 설치 ; <a target='tab' href='http://get.adobe.com/kr/flashplayer/otherversions/'>http://get.adobe.com/kr/flashplayer/otherversions/</a> </pre> <br /> 참고로, Java Applet의 경우 JRE 7과 연동하는 경우 충돌이 발생하는 현상은 여전합니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> Visual Studio 2013의 경우 CefSharp, CefSharp.WinForms 프로젝트를 컴파일하는 경우 다음과 같은 빌드 오류가 발생할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1800' in AssemblyInfo.obj </pre> <br /> 해법은 아래의 글에서처럼,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1700' in CppFile1.obj ; <a target='tab' href='http://stackoverflow.com/questions/19575747/error-lnk2038-mismatch-detected-for-msc-ver-value-1600-doesnt-match-valu'>http://stackoverflow.com/questions/19575747/error-lnk2038-mismatch-detected-for-msc-ver-value-1600-doesnt-match-valu</a> </pre> <br /> 개별 프로젝트의 "Platform Toolset" 설정을 이전 v100 버전으로 맞춰주어야 합니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1817
(왼쪽의 숫자를 입력해야 합니다.)