검색결과 리스트
00_Develop_whOLE에 해당되는 글 8건
- 2012.06.22 C# winform <-> javascript 연동
- 2009.02.20 MicroSoft Office Automation : PPT
- 2008.12.24 TRACE
- 2008.08.11 '지원되지 않는 작업을 시도했습니다' 1
- 2008.04.10 1>Registering ActiveX Control...
- 2007.09.09 한영상태 확인하기
- 2007.09.09 ActiveX 코딩시 clsid로 인한 ocx 재설치 오류
- 2007.09.09 MFC ActiveX 복제시 ocx GUID 변경방법 1
글
C# winform <-> javascript 연동
C# winform 개발 중, webbrowser 컨트롤 사용시에 javascript와의 연동이 필요한 경우가 종종 있다.
java와의 상호연동에 대한 정리.
winform->javascript 호출
C#
private void button1_Click(object sender, EventArgs e)
{
try
{
webBrowser1.Document.InvokeScript("CallScript", new Object[] { "변수1","변수2" });
}
catch (Exception ex)
{
System.Diagnostics.Debug.Write(ex.Message);
}
}
javascript
function CallScript (var1, var2) {
document.write('var1 :' +var1 +' var2 :' + var2);
}
winform의 button1을 클릭하면 webbrowser에서 출력.
javascript->winform 호출
javascript
function SendMessage() {
var msg = "this is test message";
window.external.CallForm(msg);
}
C#
using System.Security.Permissions;
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[System.Runtime.InteropServices.ComVisibleAttribute(true)]
private void Form1_Load(object sender, EventArgs e)
{
글
MicroSoft Office Automation : PPT
: powerpoint 2003 + VS2005 sp1 + mfc
도움 되는 사이트
1. http://support.microsoft.com/kb/169505
- 파워포인트 오토메이션 개발에 기본적인 정보를 제공해주는 ms 페이지.
- 위 사이트는 vs6.0을 기반으로 정보를 제공하고 있는듯.
vs 2005에서 typelibrary를 가져오면 각 클래스별로 cpp와 .h파일을 생성한다.
또한 에러도 작렬. 정보도 없고 시간도 부족해서 에러 잡을 생각은 못함 -_-;;
typelibrary 가져오기만 6.0으로 하고 생성된 msppt.cpp와 msppt.h를 2005 프로젝트에 삽입해서 사용함.
- 대부분의 파워포인트상의 UI메뉴는 _Presentation클래스 내에서 거의 동일한 이름으로 존재함. 그냥 가져다 쓰면됨.
- 이 사이트에 있는 내용대로만 구현 할 수 있으면, 나머지는 olb에서 클래스 가져다 응용해서 쓰기만 하면 됨.
2. http://support.microsoft.com/kb/308336/
- 파워포인트 오토메이션 개발에 꼭 필요한 레퍼런스!
- 1번 사이트에서 실행, 저장 종료 같은걸 하고, 이 사이트에서 ppt 그리기(?)를 배운다.
쉽게말하자면 1번은 이제 스킬책을 사서 더블클릭한거고 2번은 숙련도 올리기 랄까 -_-;
- 이건 2005 기준인듯.
3. http://powerpoint.objectsdefined.com/Microsoft/PowerPoint/2003/default.htm
- 파워포인트 오토메이션 개발 시에 사용할 함수와 각 옵션별 세팅값을 정리해둔 페이지.
- 세팅값에 대한 것은 아주 세세하게 정리되있어서 편리하지만, 어디에 쓰이는 값인지에 대한 정보는 일일히 다 들어가봐야 알 수 있음 -_-
- 또한 각 함수에 대한 reference도 없음. 구글신에게 물어봐야 함 -_-
사실 위 두개 페이지 외에는 어떤 오토메이션 기능을 넣을 것이냐에 따라 직접 찾아봐야 함.
그런데 너무도 정보가 부족하니 노가다가 필요 -_-
특히나 MFC에서의 오토메이션 개발에 대한 정보는 베이직이나 .net, #에 비해 너무나도 부족
(당연한걸지도...쩝 -_-)
글
TRACE
![사용자 삽입 이미지](https://t1.daumcdn.net/tistoryfile/fs14/28_14_10_26_blog83071_attach_0_0.jpg?original)
갑작스럽게 한 업체에서 발생했다는 에러.
혹시 모를 경우를 대비해 outputdebugstring을 쓴 곳에서 에러가 났겠거니 하고
output을 신나게 지워주고 다시 업데이트.
그러나 똑같은 에러
-_-....
뭥미??
당체 릴리즈로 생성한 exe에서 이런 에러가 난다는것 자체가 어처구니 없는 일이라
디버그모드에서 해보니 똑같은 에러!!!
콜스택을 따라가봤더니 범인은 바로 TRACE()
-_-
마소 왈
'TRACE는 릴리즈시 제외됩니다'
........근데 왜 exe에서 에러가 나니?
.......
오늘의 교훈
'마소는 역시 개다'
-_-
메리크리스마스!
글
'지원되지 않는 작업을 시도했습니다'
visual studio 2005 sp1. vc++ mfc80
릴리즈로 생성된 exe파일을 실행하려는데 갑자기 나타나는 쌩뚱맞은 메세지.
![사용자 삽입 이미지](https://t1.daumcdn.net/tistoryfile/fs9/13_14_10_26_blog83071_attach_0_2.jpg?original)
다시 디버그로 컴파일후 실행해보니 나타나는 개막장 메세지~!!!
![사용자 삽입 이미지](https://t1.daumcdn.net/tistoryfile/fs7/13_14_10_26_blog83071_attach_0_4.jpg?original)
여기서 '무시'를 누르면 다시 '지원되지 않는 작업을 시도했습니다'라는 메세지와 함께
다른 곳에서 또 에러..에러..에러..._-;;
내가 무슨짓을 했지? 하고 가만히 생각해보니
다이알로그 위에 올려놨던 에디트박스 컨트롤을 지우고
에디트박스에 연결해놓은 멤버변수를 지우지 않았다.
2005정도 되면 그런건 알아서 지워줄줄 알았건만 -_-....
컨트롤과 연결된 멤버변수를 싹 다 지워주니, 문제 없이 실행~
2005 실망이야.
글
1>Registering ActiveX Control...
Registering ActiveX Control 단계에서 멈추는 현상이 있다.
단지 컴파일이 멈춰버리는 현상.
작업관리자에서 regsvr32를 종료시켜버리면 빌드 성공이라는 메세지를 준다.
왜 이런고 했더니
app에서 외부DLL이나 LIB를 사용하면 컴파일이 아니되더라능.
예를 들어 GDI와 같이
습관적으로 InitInstance와 ExitInstance에 생성자와 소멸자를 쓰는 녀석들은
Ctl의 생성자와 소멸자로 위치를 옮겨주면 잘 된다능.-_-
근데 내가 뭐 하다가 ActiveX에 GDI를 붙였지? -_-;;;;
글
한영상태 확인하기
#include <imm.h>
///project Link : imm32.lib Release는 링크가 안붙으니 수동으로 붙여야 함...(vc6.0)
DWORD conv, sentence;
HIMC h_imc = ImmGetContext(this->m_hWnd);
ImmGetConversionStatus(h_imc, &conv, &sentence);
if(conv & IME_CMODE_LANGUAGE){
AfxMessageBox("한글상태");
}
else{
AfxMessageBox("영어상태");
}
ImmReleaseContext(m_hWnd, h_imc);
영어상태로 유지시키려면 if 밑에 keybd_event(VK_HANGUL,0,0,0);
한글상태로 유지시키려면 else밑에 keybd_event(VK_HANGUL,0,0,0);
한영키를 만들고 싶으면 두곳에 다 keybd_event(VK_HANGUL,0,0,0);
글
ActiveX 코딩시 clsid로 인한 ocx 재설치 오류
ActiveX사용을 종료한후,
OLE View(시작>프로그램>MS Visual Studio>Visual Studio의 도구들)를 열어서
All Objects에서 ActiveX의 Project Name, 혹은
GUID(Project Name이 지정되지 않았을 경우 GUID로 object가 연결됨)를 선택하면
참조하는 ocx파일의 경로가 나타난다.(대부분 project/release/projectname.ocx일거다)
이 경로를 탐색기등으로 복사한 후,(파일경로 .ocx까지)
시작>실행>regsvr32 /u '경로'>엔터
하면 '경로'의 DLLUnregisterServer 성공 이라고 뜬다.
그럼 이제 웹에서 받아서 테스트 ㄱㄱ
테스트 후 다시 Visual c++에서 릴리즈 하면 다시 경로가 로컬로 덮어씌워진다-_-
참조하는 ocx의 경로는 이미 지정되있는 경로가 웹일 경우엔 로컬로 덮어씌워지지만,
어째서인지 지정되있는 경로가 로컬일 경우에는
웹 경로가 덮어씌워 지지 않는다. 왜일까 -_-도대체 왜 -_-;
아무튼 그렇기 때문에, 필수로 거쳐야 한다.
글
MFC ActiveX 복제시 ocx GUID 변경방법
같은 GUID를 쓰는 ocx가 두개이상 설치되어있을 경우엔,
먼저 설치된 ocx파일만 실행되므로 변경해야함.
*웹 연결시 사용하는 GUID는 odl파일의 4번째 UUID임.(odl파일의 가장 마지막 UUID)*
작성환경 : ms vc++ 6.0 sp6
1. 시작>실행>guidgen.exe
2. 3.static const struct Guid == 를 선택, New Guid & Copy
3. 생성된 GUID를 4개로 복제.
예) 생성된 GUID가 아래와 같을 경우
// {77293D66-B77E-4973-83C1-325286629E23}
static const GUID <<name>> =
{ 0x77293d66, 0xb77e, 0x4973, { 0x83, 0xc1, 0x32, 0x52, 0x86, 0x62, 0x9e, 0x23 } };
**가운데 static const...는 필요없으므로 삭제해도 무방**
원본.
// {77293D66-B77E-4973-83C1-325286629E23}
{ 0x77293d66, 0xb77e, 0x4973, { 0x83, 0xc1, 0x32, 0x52, 0x86, 0x62, 0x9e, 0x23 } };
복제1.
// {77293D67-B77E-4973-83C1-325286629E23}
{ 0x77293d67, 0xb77e, 0x4973, { 0x83, 0xc1, 0x32, 0x52, 0x86, 0x62, 0x9e, 0x23 } };
복제2.
// {77293D68-B77E-4973-83C1-325286629E23}
{ 0x77293d68, 0xb77e, 0x4973, { 0x83, 0xc1, 0x32, 0x52, 0x86, 0x62, 0x9e, 0x23 } };
복제3.
// {77293D69-B77E-4973-83C1-325286629E23}
{ 0x77293d69, 0xb77e, 0x4973, { 0x83, 0xc1, 0x32, 0x52, 0x86, 0x62, 0x9e, 0x23 } };
이런 식으로 첫 단락의 끝자리만 변경.
숫자가 아니라 알파벳일 경우 A,B,C의 순서대로 나간다.
4. 복제된 UID를 odl파일에 있는 4개의 uuid에 순서대로 붙여넣기
5. cpp파일의 GUID수정
const GUID CDECL BASED_CODE _ctlid =
의 밑에 존재하는 GUID를 '복제3'의 GUID로 변경
const GUID CDECL BASED_CODE _tlid =
의 밑에 존재하는 GUID를 '원본'의 GUID로 변경
** CATID를 변경하지 않음**
6. Ctl.cpp파일의 GUID 수정
'복제3'의 GUID를 IMPLEMENT_OLECREATE형식으로 변경한 후
(변경 예 { 0x77293d69, 0xb77e, 0x4973, { 0x83, 0xc1, 0x32, 0x52, 0x86, 0x62, 0x9e, 0x23 } };
↓↓↓↓ ↓↓↓↓ ↓↓↓↓
0x77293d69, 0xb77e, 0x4973, 0x83, 0xc1, 0x32, 0x52, 0x86, 0x62, 0x9e, 0x23
중괄호만 지워주면 됨 )
Ctl.cpp의 IMPLEMENT_OLECREATE_EX( 안에 존재하는 GUID를
수정한 '복제3'의 GUID로 변경
const IID BASED_CODE 의 GUID를 '복제1'의 GUID로 변경
const IID BASED_CODE *Events 의 GUID를 '복제2'의 GUID로 변경
***GUID중 cpp의 CATID와 Ppg.cpp의 GUID는 변경하지 않음***