1. 윈도우 서비스 프로그램 생성

드라이버 설치를 요즘 하고 있는데 힝 정리가 안돼 

내가 그동안 어떤 작업들을 해서 지금 결과가 나왔는지 작업 과정을 적도록 해야겠다.


-윈도우 서비스 프로그램 생성

: 서비스를 동작하기 위해서 세 가지의 프로그램을 생성하였다. 서비스 프로그램, 서비스 설치, 제거 프로그램, 서비스 제어 프로그램

 

1.      서비스 프로그램 (MemstatService.exe)

A.     구성

                         i.         Main 함수

                        ii.         서비스 메인

                       iii.         핸들러 함수

 

2.      서비스 설치, 제거 프로그램

A.     Install()과정

                         i.         OpenSCManager()

                        ii.         CreateService()

B.      UnInstall() 과정

                         i.         OpenSCManager()

                        ii.         OpenService()

                       iii.         DeleteService()

                       iv.         서비스가 실행 중이면 멈추는 과정도 필요

 

3.      서비스 제어 프로그램

A.     서비스의 상태 변환을 도와주는 프로그램

                         i.         서비스의 상태

1.      시작

2.      중지

3.      일시중지

4.      사용자 정의 신호(ex) 새 로그 파일 )

 

CString 사용

CAtlArray <CString> a;


a.add("111");

a.add("222");

  1. a[i].GetBuffer() 안됌
    a.GetAt(i) 사용
      1. GetBuffer : 수정할 경우
      2. GetString : 값을 참조 할 경우
      3. strcpy(a.GetBuffer(), a.GetString());

-The String as an array
GetLength : 설정된 문자열의 길이를 리턴
int GetLength() const;

IsEmpth : 문자열의 버퍼가 비워져 있는지 검사
BOOL IsEmpth() const;

Empty : 문자열을 삭제하여 버퍼를 비운다
void Empty();

GetAt : 특정위치의 문자값을 얻는다.

TCHAR GetAt(int nIndex) const;


operator[]

TCHAR operator[](int nIndex)const


SetAt

void SetAt(int nIndex, TCHAR ch);


operator LPCTSTR

operator LPCTSTR() const;


-Comparison

Compare :  대소문자 구분

int Compare(LPCTSTR lpsz) const;


CompareNoCase : 대소문자 구분 안함 

int CompareNoCase(PCTSTR lpsz) const;


Collate

int Collate(LPCTSTR lpsz) const;


CollateNoCase

int CollateNoCase(LPCTSTR lpsz) const;


-Extraction

Mid : 문자열의 중간부분을 추출한다.

CString Mid(int nFirst) const;

CString Mid(int nFirst, int nCount) const;


Left : 문자열의 왼쪽부분을 추출한다.

CString Let(int nCount) const;


Right: 문자열의 오른쪽부분을 추출한다.

CString Right(int nCount) const;


SpanIncludeing: 포함된 문자를 추출

CString SpanIncluding(LPCTSTR lpszCharSet) const;


SpanExcluding 



-Other Conversions

MakeUpper : 소문자를 대문자로 바꾼다.

void MakeUpper();





'and so on > 문자열' 카테고리의 다른 글

꼮꼮읽어보기  (0) 2012.12.20
msdn  (0) 2012.12.18
UTF-8, UNICODE, ANSI - 인코딩에 대하여  (0) 2012.12.18
멀티/유니->utf8, utf8->멀티/유니  (0) 2012.12.10
형변환 주의하기  (0) 2012.12.10

버그. 에러, 예외

버그(Bug) : 버그는 간단히 말해 프로그래머에 의한 에러이다. 예를 들어, 비관리 C++로 프로그래밍하는 경우, NULL 포인터를 호출하거나, 배열에서 오버플로우가 발생하거나, 할당된 메모리를 지우지 않은 경우(결국 메모리 누출로 이어지는)가 버그에 해당된다.

에러(error) : 에러는 버그와 달리 일반적으로 응용 프로그램의 사용자에 의해서 발생한다. 예를 들어, 사용자가 주민등록번호를 입력하는 난에 이상한 문자열을 입력하는 경우가 있을 수 있다. 프로그래머가 이러한 경우를 대비해서 적절한 예외 처리를 하지 않았다면 에러가 발생한다.

예외(exception) : 예외는 일반적으로 런타임 오류와 관련된 것으로서, 예방하기가 어렵거나 불가능한 것들이다. 더 이상 존재하지 않는 데이터베이스에 연결하려고 한다거나, 손상된 파일을 열려고 하거나, 오프라인 상태인 머신에 접속하려고 하는 경우 예외가 발생할 수 있다. 프로그래머나 사용자는 이러한 '예외적인' 경우에 대처하기가 어렵다. 


http://hermeslog.tistory.com/72

'and so on > error' 카테고리의 다른 글

GetLastError 1406  (0) 2014.05.19
RegisterTaskDefinition 80070534 error  (0) 2014.03.04
F5 실행 Ctrl F5 결과 값 차이 발생  (0) 2012.12.07
[SVN] checkout 하기  (0) 2012.12.04
[LNK2001] 외부 기호를 확인할 수 없습니다.  (0) 2012.11.26

[C#] 파일 쓰기

C#은 파일 쓰기 간단하다 


using System.IO;




string MyFile = @"data.txt";

            string buf = "Hi Hello 안녕";

StreamWriter FW = File.CreateText(MyFile);

            

FW.WriteLine(buf);

            

FW.Close();


'and so on > c#' 카테고리의 다른 글

.NetFramework 설치 확인 하기  (0) 2013.01.17
C# PPT 내용 읽기  (0) 2013.01.15
c# 오피스 참조한 프로젝트 배포 시 필요한 dll  (0) 2013.01.07
c#dll c++에서 사용  (2) 2013.01.02
C++ DLL 함수 char*를 C#에서 읽어 오기  (0) 2012.09.26

.NetFramework 설치 확인 하기

각 버전별로 설치 되어있을경우 레지스트리 경로가 요기잉네?

http://support.microsoft.com/kb/318785/ko



=> 레지스트리 값을 읽어서 닷넷 프레임워크 설치 유무를 알 수 있음


-C# 버전 

http://msdn.microsoft.com/ko-kr/library/hh925568.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

ㅎㅎㅎㅎ나는 C++이 필요하다고 


/////////////////////////////////////////////////////////////////////////

4- 클라이언트 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client

4전체 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full

3.5 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5

3.0 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup

2.0 

HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP\v2.0.50727


2.0, 3.0 3.5 서비스팩과 릴리즈 

원래 릴리즈의 경로를 가지고 있고, 값도 같음 (이름 : 설치, 형식 : REG_DWORD 데이터 : 1)


1.0은 원래 릴리즈 설치 경로 같고, 값이 다름

1.1은 64비트 32비트 설치 경로 다름 

'and so on > c#' 카테고리의 다른 글

[C#] 파일 쓰기  (0) 2013.01.18
C# PPT 내용 읽기  (0) 2013.01.15
c# 오피스 참조한 프로젝트 배포 시 필요한 dll  (0) 2013.01.07
c#dll c++에서 사용  (2) 2013.01.02
C++ DLL 함수 char*를 C#에서 읽어 오기  (0) 2012.09.26

C# PPT 내용 읽기

          PowerPoint.Application PowerPoint_App = new PowerPoint.Application();

            PowerPoint.Presentations multi_presentations = PowerPoint_App.Presentations;

            PowerPoint.Presentation presentation = multi_presentations.Open(@"C:\test - 복사본.pptx");

           

            string presentation_text = "";

            

            for (int i = 0; i < presentation.Slides.Count; i++)

            {

                foreach (var item in presentation.Slides[i + 1].Shapes)

                {

                    var shape = (PowerPoint.Shape)item;

                    if (shape.HasTextFrame == MsoTriState.msoTrue)

                    {

                        if (shape.TextFrame.HasText == MsoTriState.msoTrue)

                        {

                            var textRange = shape.TextFrame.TextRange;

                            var text = textRange.Text;

                            presentation_text += text + " ";

                            textBox1.Text = presentation_text;

                        }

                    }

                }

            }

            PowerPoint_App.Quit();

            Console.WriteLine(presentation_text);



ppt 는 문제가 많다 

'and so on > c#' 카테고리의 다른 글

[C#] 파일 쓰기  (0) 2013.01.18
.NetFramework 설치 확인 하기  (0) 2013.01.17
c# 오피스 참조한 프로젝트 배포 시 필요한 dll  (0) 2013.01.07
c#dll c++에서 사용  (2) 2013.01.02
C++ DLL 함수 char*를 C#에서 읽어 오기  (0) 2012.09.26

0

http://forum.falinux.com/zbxe/?mid=gcc&document_srl=406260


서비스

http://crowback.tistory.com/218

'and so on' 카테고리의 다른 글

개발 문서화 방법  (0) 2014.03.11
문서작성의 5가지 口訣  (0) 2013.03.04
assembly  (0) 2013.01.02
RegAsm  (0) 2012.09.21
아이디어가 고갈되었을 때의 처방전 20  (0) 2012.08.28

c# 오피스 참조한 프로젝트 배포 시 필요한 dll

Microsoft.Office.Interop.Excel.DLL

 위치 : C:\Program Files\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14


Microsoft.Office.Interop.Word.dll

 위치 : C:\Program Files\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14


Microsoft.Vbe.Interop.dll

 위치 : C:\Program Files\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14


office.dll

 위치 : C:\Program Files\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14


stdole.dll

 위치 : C:\Program Files\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Common


파워포인트는 내가 안써서 지움




vs가 설치되어 있지 않을 때 필요한 dll

msvcp100.dll

 위치 : C:\Program Files\Microsoft Visual Studio 10.0\VC\redist\x86\Microsoft.VC100.CRT

msvcr100.dll

 위치 : C:\Program Files\Microsoft Visual Studio 10.0\VC\redist\x86\Microsoft.VC100.CRT


dll 알아 내려고 설치 프로젝트까지 생성했다




* 나는 dll 생성하여서 오피스 관련 dll이 같이 안생겼는데

exe 파일로 생성하면 debug, release 폴더에 저 dll도 생기는 것 같음



*오피스 참조시에는 개발한 PC의 오피스와 

 사용될 PC의 오피스 고려해야 함

따라서 참조 시에 COM 탭에서 오피스 추가하는 것이 아닌

.NET 탭에서 해줌

'and so on > c#' 카테고리의 다른 글

.NetFramework 설치 확인 하기  (0) 2013.01.17
C# PPT 내용 읽기  (0) 2013.01.15
c#dll c++에서 사용  (2) 2013.01.02
C++ DLL 함수 char*를 C#에서 읽어 오기  (0) 2012.09.26
C# - Excel 내용 읽어오기  (0) 2012.09.17

c#dll c++에서 사용

- c#


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;


using System.Runtime.InteropServices;


namespace MyEngin

{

    [Guid("DBE0E8C4-1C61-41f3-B6A4-4E2F353D3D05")]

    public interface IManagedInterface

    {

        int add(int a, int b);

        int printHi();

    }

    [Guid("C6659361-1625-4746-931C-36014B146679")]

    public class InterfaceImplementation : IManagedInterface

    {

        public int add(int a, int b)

        {

            return a + b;

        }

        public int printHi()

        {

            Console.WriteLine("안녕");

            return 1;

        }

    }

}


속성 

응용 프로그램 -> 어셈블리 정보-> 어셈블리를 COM에 노출 체크

빌드->COM Interop 등록 체크



visual studio 명령 프롬프트

regasm MyEngin.dll /tlb MyEngin.tlb


- c++



#include <Windows.h>

#include <stdio.h>


#pragma warning (disable: 4278)


#import "MyEngin.tlb" no_namespace named_guids



void main()

{

IManagedInterface *csi=NULL; 


   CoInitialize(NULL);


   HRESULT hr = CoCreateInstance(CLSID_InterfaceImplementation,NULL,CLSCTX_INPROC_SERVER,IID_IManagedInterface,reinterpret_cast<void**>(&csi));

   int a=GetLastError();

   if(SUCCEEDED(hr))

   {

  int b=csi->add(2,3); //C# dll에 있는 함수

  

  printf("%d\n", b);

  csi->printHi();

  getchar();

  CoUninitialize();

   }


}



* GUID는 

C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\guidgen.exe로 생성 가능하다


 * 다른 PC에서 dll 사용 시 regasm 이용하여 tlb 등록하여야 함


* CoCreateInstance()에서 0x80070002 에러 발생 시

regasm MyEngin /codebase 한 후 

c++에서 빌드 하면 됌



assembly

http://network-dev.tistory.com/409

'and so on' 카테고리의 다른 글

문서작성의 5가지 口訣  (0) 2013.03.04
0  (0) 2013.01.08
RegAsm  (0) 2012.09.21
아이디어가 고갈되었을 때의 처방전 20  (0) 2012.08.28
작업 디렉터리  (0) 2012.08.13