Solving You have started VMware Server with an out-of-date copy of the application.

If you get the following error message when running your VMWare Virtual Machine, please look at a great article by Anar Z. Taghiyev here.

You have started VMware Server with an out-of-date copy of the application. VMware Server cannot power on virtual machines using this copy (version 2.0.2). To power on this virtual machine, run VMware Server from the default location.

[In case the content got removed from the site, here it is.]

This afternoon after successfully running VMware 2.0.2 Server for a few days, my VM image would consistently fail to power on with the following error

Message from : You have started VMware Server with an out-of-date copy of the application. VMware Server cannot power on virtual machines using this copy (version 2.0.2). To power on this virtual machine, run VMware Server from the default location.

There were no updates applied to the server. The only change to the image itself was increased disk space. The server was registered with a valid license immediately following the installation a few days back.

After further investigating, the details of the actual problem and the workaround were found in the vmware-x.log files -

Jun 17 12:25:36.100: vmx| VMX_PowerOn: VMX build 203138, UI build -1
Jun 17 12:25:36.100: vmx| VMX_PowerOn: Error: VMX build 203138 doesn't match UI (no build number set, version 2.0.2). Failing power-on operation. Use vmx.noUIBuildNumberCheck to skip this check.
Jun 17 12:25:36.100: vmx| Msg_Post: Error
Jun 17 12:25:36.100: vmx| [msg.main.versionMismatch

After adding

vmx.noUIBuildNumberCheck = "TRUE"

to the VMware configuration file (.vmx), I was able to power on my VM image once again.


[출처]

http://binyit.blogspot.kr/2014/01/solving-you-have-started-vmware-server.html

Posted by 모과이IT
,

이번 포스팅에서는 대표적인 언어 C, C++, Java, C# 의 차이에 대해 설명 해 보겠습니다.
먼저, 개인적인 생각과 경험에 나온 기술이기에 제 설명이 틀릴 수도 있습니다.

프로그램 언어의 탄생은 C -> C++, Java, C# 순서입니다. 여기서 C#이 가장 나중에 개발 된 프로그램 언어라 하겠습니다만, 그렇다고 C#이 가장 우수한 언어, 좋은 언어라고 하기에는 오류가 있겠습니다.
먼저 기술적, 개념적으로 언어적 특성이나 언어의 처리속도는 차이가 없습니다.. 다만 문법적으로는 차이가 조금씩은 있습니다.

기술적으로는 차이가 없는 이 언어들을 구분을 지어보겠다면 C, C++(MFC)와 Java, C#으로 나뉠 수 있습니다. 혹자는 1세대, 2세대 언어라고도 표현합니다.
이 두 언어의 가장 큰 차이점은 C, C++은 소스레벨의 코딩이 가능하고, Java, C#는 클래스는 동적으로 움직이며 클래스 기반의 언어(?)라고 할 수 있곘네요.
또 다른 큰 차이는 프레임워크(Java에서는 JVM)이 있고 없고의 차이도 있겠네요

그렇다면 왜 C, C++, Java, C# 언어들은 각기 나뉘어져 있고 또 개발자들은 나뉘어서 개발을 할까요??

제 생각의 가장 큰 이유는 돈 때문입니다. 소프트웨어 공학 등의 학문도 그렇고 실무 프로젝트 구성도 보면 결국 전부 돈과 직결되어 있습니다.
개발을 할 시에 언어를 선택하는 것도 결국은 돈 때문에 선택을 하고 나뉘게 되겠습니다.
단지 C는 오픈언어, Java는 오라클사(과거 Sun), C++, C#은 MS사의 소유권 문제만은 아닌 듯 싶네요.

개발 단가로 살펴 보면은 C와 C++(MFC)의 프로그램 단가가 가장 비쌉니다. 그리고 C#이 비싸고 Java가 가장 싼 프로그램이 되겠네요.
물론 프로그램이 비싸다고 해서 우수한 프로그램은 아니고 Java가 가장 싼 프로그램이라고 해서 허접한 것은 아닙니다. 또 반대로 C와 C++ 개발자라고 해서 보수가 높은 것도 아니고 Java개발자라고 해서 싸구려 개발자라는 뜻도 아닙니다. 그럼 왜 이런 단가가 나누어져 있을까요?

먼저 프로그램 기간을 살펴보면 C와 C++(MFC)은 개발 개간이 깁니다. 반대로 C#과 Java는 C,C++에 비교해서 개발기간이 짧네요. 그렇다 보니 프로그램 가격의 차이가 나옵니다. 이런 생산성을 가진 C#과 Java인데도 불구 하고 아직 시장에는 C와 C++개발 건이 많이 있습니다. 그 이유는 Java와 C#은 프레임워크를 벗어난 네이티브적인 개발은 불가능 하나 C와 C++은 네이티브 개발도 가능하기에 운영체제의 커널이나 하드웨어, 드라이버등의 개발에 용이하기 때문입니다.
그럼 왜 이런차이가 생기는 지에 대해 자세히 설명하겠습니다.


1990년대 초,중반에 과거 Sun사에서는 Java라는 언어를 발표헀습니다. Java의 프로젝트의 목표는 어떠한 플랫폼에서도 개발을 할 수 있는 언어가 목표였습니다.이건 지극히 제 생각인데 C언어도 어떠한 플랫폼에서 개발할 수 있지 않았나 싶은데?? 모르겠네요.
다시 돌아와서 Java가 발표되고 어떤 언어였나 싶으면 C, C++개발자가 보기엔 획기적인 언어였습니다. 현재에서는 하드웨어가 컴퓨터도 그렇지만 통신회선도 그렇고 많은 표준이 생가면서 프로그램 속도, 통신속도가 비약적으로 향상되었지만 1990년대에만 해도 전화모뎀을 쓰는 열약하고 느린 환경에서 JVM머신을 이용하여 이 모든 것이 빠르게 개선 된 것처럼 보이는 것이 아이디어에 놀라웠습니다.
그리고 또 당시 전 세계의 소프트웨어 시장을 잠식하고 있었던 MS에 압박할 수 있었던 무기는 오픈소스 정책이 있었습니다. 기존의 C언어 C++를 생각해 보면 개발자들이 소스를 공유, 모듈을 공유한다는 것에 대해 개념도 없었지만, 서로 정해 놓은 개발서의 형식, 개발 표준이 정해지지 않아서 소스공유의 에로 사항도 많았습니다. 아니 소스 공유에 대한 인식 조차 없었다고 하는게 맞겠네요.
또 프로그램을 보더라도 라이브러리는 DLL로 묶여있어서 해당 모듈 개발자가 아니면 거의 손댈 수 없는 형식이여서 프로젝트가 시작되면 하나부터 열까지 다 개발해야 하는 형식이었습니다. 즉 프로젝트를 할 때마다 똑같은 반복작업이 엄청 많다는 뜻이지요.

그러나 Java는 오픈소스정책, 즉 자주 쓰는 모듈은 공유, 자바독으로 프로그램 사용하는 방법에 대한 기술이 공개가 되고, 또 자바는 개발하는 규칙을 일목요연하게 정리를 해 놓아서 누가 봐도 알 수 있는 소스식으로 나오면서 인기가 얻기 시작합니다.

프로그램을 시작하는 사람으로서는 접근하기 쉬우니 자바에 관심이 가고 기존 개발자들은 반복되는 작업을 생략하고 좀 더 창의적이고 생산적인 개발환경에 마음이 들어 많은 개발자들이 C, C++에서 Java로 갈아타기 시작합니다.

요즘에야 C, C++도 개발 규약이 많이 생겨서 많이 정리가 됐지, 가끔 돌아다니는 90년대 초반 개발 소스를 보면 알아먹을 수가 없습니다. 뭐 이리 복잡하게 만들었는지..

그에 압박을 느끼기 시작한 MS사가 90년대 말 Basic의 생산성, C++ 성능, 델파이의 개념이 결합된 언어라고 C#를 내 놓습니다. (자바언급은 없어요.. 내가 보기엔 자바 판박인데 말이죠..). C#은 그렇게 탄생이 되었습니다.

그렇게 언어들은 탄생이 되고, 90년대의 또 하나의 큰 이슈는 WWW라고 하는 월드 와이드 웹이라는 개념의 웹이 등장하게 됩니다. 이 웹의 등장으로 채택된 언어는 Asp, PHP 가 있으나 Java의 등장으로 웹과 Java가 만나게 됩니다.
이는 Java의 폭발적인 인기를 얻게 되는 또 하나의 이유가 되기도 하는데 웹의 발전 상승과 Java의 발전 상승과 맞물리게 됩니다. 그렇게 등장한 Java와 2000년도 초반의 C#은 인터넷 기반, 웹기반의 프로젝트에서 서로 경쟁하듯이 발전을 하게 됩니다.
C# FrameWork 1.1에서 3.5까지는 Web기반의 프레임워크가 많은 발전을 했습니다.

그런 상황에 놓이다 보니 C와 C++은 90년대 후반부터 입지가 조금씩 밀리기 시작했습니다. Java로 갈아 탄 개발자들이야 프로젝트가 많이 지니 좋지만 갈아타지 못한 사람들은 프로젝트가 줄어드니 달갑지는 않지요. 개인적인 생각이지만 이 때부터 MS개발자와 Java는 웬수가 되는 듯….ㅎㅎ 여담입니다.

그렇게 입지가 좋아진 C, C++은 웹과 인터넷 기반의 프로그램이 아닌 Java와 C#이 접근하기 힘든 커널과 하드웨어, 모바일쪽으로 특화가 되기 시작합니다. 90년대 후반부터 핸드폰의 보급이 시작되는데 이 때 들어가는 언어가 심바오C++로써 C언어와 C++개발자들은 그 쪽으로 특화가 되기 시작합니다. 지금은 모바일도 Java 안드로이드가 점령을 해서 이제는 아예 드라이버, 임베디드, 커널 개발등으로 특화가 되어 이제는 시스템적인 언어로 인식이 박히게 되지요..

다시 돌아와서 2000년대 초반에 Java와 C#은 인터넷의 패권으로 경쟁을 하게 됩니다. 
여기서는 이제 Java와 C#의 차이가 나기 시작합니다.
Java는 개발하기 위해서는 비용이 들지 않습니다. Java언어 자체도 무료고, 대표 개발툴인 이클립스도 무료 입니다. 기동되는 서버는 Linux인데 RedHat을 많이 사용합니다. RedHat자체는 유료이나 그와 같은 무료버전인 CentOs가 있으므로 실질적으로 무료로 개발이 가능합니다. 또 데이터 베이스는 오라클인데 오라클은 가격이 있지만 또 무료로 전환가능한 Mysql, postgre 가 있으므로 이 부분도 비용절감이 가능합니다.
즉 개발에서 릴리즈까지 돈을 한푼도 안쓰고 개발이 가능한다는 뜻입니다. 개발자 인건비, 서버 회선비 정도가 들겠네요.

그에 비해 C#은 C#자체는 무료 입니다만, 대표 개발툴인 Visual Studio는 고가의 개발툴입니다. 또 기동되는 서버는 Window Server인데 이것도 상당히 비싸지요. 데이터 베이스는 MSSQL입니다. 뭐 이건 Mysql로 전환이 가능합니다만 C#은 보통 Mssql를 사용하지요. 자바와 같이 개발자 인건비, 서버 회선비가 든다는 것입니다.

여기까지 오면 프로그램을 만드는 입장에서는 어떤 언어를 선택하게 되는 것일까요?
품질의 아주 큰 차이가 있지 않는 이상은 가격이 싼 Java를 선택하게 되어있습니다. 그래서 그런지 C#은 초반에는 상당한 분전을 하다가 웹 계통은 상당히 밀린 듯한 모습을 보입니다.

그럼 C#을 누가 쓰냐? 하는 질문이 생기게 되겠습니다. C#를 배포하는 MS사는 Java를 압도 할 수 있는 무기가 무었이냐.. 점유율입니다.
웹 쪽에서는 밀리는 듯 하지만 CS 인터넷 기반 프로그램에서는 완전한 강세를 보이고 있지요.개인적으로도 Java Swing은 사용도 어렵고 메모리 릭도 많고 호환성도 떨어지더라구요. 그렇지만 같은 MS계열의 윈도우와 C#은 이야기가 다름니다..

단가는 비쌀지언정 확실한 품질차이가 있기 때문에 WindowForm의 윈도우개발은 C#이 강세를 가져갈 수 밖에 없습니다.

그러나 최근에는 안드로이드와 IOS 애들의 강세로 MS도 많이 주춤거리고 있습니다. Window Mobile도 많은 전략을 내세웠으나 뚜렷한 성장세를 보이고 있지 않는 듯 하구요..

앞으로는 언어대결은 어떻게 흘러갈까요?? 개발하는 입장에서 이를 지켜보는 것도 또 하나의 즐거움이겠습니다.

Posted by 모과이IT
,

http://studyforus.tistory.com/63


위의 사이트에서 설명이 되어져있지만, 위의 내용중 핵심을 정리하자면


루트 폴더 



1. 가상디렉토리 추가

2. 가상디렉토리 추가시에 윈도우7의 계정 이름으로 생성

3. ../윈도우계정/LocaUser/ 실제 폴더로 가서 IIS_USRS 그룹소속의 계정과 "FTP 권한 부여 규칙"에 허용한 규칙의 계정 이름과 동일한 폴더를 만들어 준다


위의 같이 해주면 IIS_USRS 계정에 등록한 계정으로 홈디렉토리로 FTP접속이 되어진다


Posted by 모과이IT
,
<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- Customize your theme here. -->

</style>

</resources>



[오류]

Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light.DarkActionBar'.


위의 오류를 위의 스크린샷 처럼 styles.xml 파일을 수정해 준다.

Posted by 모과이IT
,

안드로이드를 개발하면서 json를 파씽해서 조작하고 지금은 직접 DB를 설계해서 php로 json를 직접 만들고 있으면서도 지금 내가 하는것이 정확히 무슨 용어가 있는지 몰랐다. 우현히 페이스북에서 RESTful 관련 강좌를 훝어 보니 이때까지 내가 했던것이 RESTFul 이었다. 이제 이런 용어로 사용해야겠다. 오랜동안 응용프로그램개발 하면서 현재 RESTful API를 php로 만들면서 웹도 건들고있는 상황이지만 웹쪽에서 이런 개념이 이미 오래전부터 사용해 왔는듯 하다.



  RESTful API란? 

기본적으로 데이터를 생성, 읽기, 수정, 삭제 하는 작업이다. 

이작업들은 간단하게 CRUD(Create, Read, Update, Delete)라고 한다. 

DB SQL 작업도 CRUD의 범주에 있다. 


RESTful API 란 HTTP를 통하여 웹서버 및 DB로 구성된 서버에게 데이타 operation 을 요청하고,

그결과를 받는 것이다. 



 RestFul 이란 무엇인가?

REST(Representational State Transfer)

요즘 서버는 1인데 클라이언트가 굉장히 다양해 졌다. 

하나의 클라이언트를 위한 서버를 구성하는 것은 비효율적인 일이 되버렸다. 

하나의 서버로 여러대의 클라이언트를 대응하도록 할때 필요한 것이 RESTFul API 이다. 


※ REST = Resource(20%) + URI(70%) + HTTP method(10%)



출처 : http://blog.naver.com/2hyoin/220401546821


Posted by 모과이IT
,

한참을 삽질하고, 보내다가 어떤 블로그를 보니, 하고싶은 것이 된다. 

블로그 정리로 시작하자. 



01. DLL Project 간단한 생성 방법은 이전에 작성한 posting 을 참조.

http://vbflash.net/900


02. Posting 하고자하는 내용 설명

 2.1 C와 C#에서의 커뮤니케이션 방법(통신방법)

...검색하다보니깐 -_- PDF로 나온다..


 Calling_C_Library_DLLs_from_C_sharp.pdf


-2013.09.30-

by 퓨림노


현재 Unity3D를 이용하여 증강현실 시스템을 개발중이다. Unity3D는 C#, Javascript의 언어를 사용한다. 

현재 기존에 개발하였던 모듈의 언어가 C,C++,Java 로 구성되어 있다. 그래서 난 C++ 로 구성되어 있는 클래스를 그대로 사용하기 위하여 C의 DLL 모듈로 만들어서 땡겨서 쓰려고 한다. 


이전에 Android <-> C의 통신을 위하여 native C를 사용해보았는데, C<->C# 또한 조금 다르게 코딩이 되어진다. 더군다나 DLL 로 만들어서 사용하기 때문에 디버깅은 미궁에 빠지게 된다. 


첫 경험이란게 정말 소중할 정도로. -_- 포스팅해두자. 난중에 되면 까먹는다. 


그래서 현재 아래의 방법을 이용하면 거진 하고 싶은 것은 할 수 있다. 라고 생각함. 

다른방법도 있지만 지금은 현재 완료되어 있는 부분부터 해결 하고 넘어가도록 하자. 


- 2013.09.27 - 

  금요일 밤인데, 집중해서 주절주절. by 퓨림노

   

     

03. C와 C#에서 다양한 방법을 통해 값을 넘겨주고 받자. 

    현재 Unity3D 의 C#코드에서 C코드를 사용하여 processing하고자 한다. 상황을 잘 이해 하였는가?


 3.0 C#에서 C의 native code 삽입하자.


// Library
	[DllImport("UnityPlugin")]
    public static extern void Scalars(double invar, ref double outvar);

    [DllImport("UnityPlugin")]
    public static extern void OneDArray(double [] anArray, int n);

    [DllImport("UnityPlugin")]
    public static extern void TwoDArray(double [,] a2dArray, int m, int n);

    [DllImport("UnityPlugin")]
    public static extern void TryComplex(Complex inputVar, ref Complex outputVar,
               [In, Out] Complex [] array, int n);

    [DllImport("UnityPlugin")]
    public static extern void MarshalStructC(ref marshalStruct pointerinStruct);
    
	[DllImport("UnityPlugin")]
    public static extern void FreeMarshalStructptr(ref marshalStruct pointerinStruct);

 - C#의 젤 상위에 DLL 을 import 한다고 작성하자.


 3.1 변수의 포인터를 이용하여 값을 넘겨주고 받자.

// 아래의 코드는 항상 들어가기 때문에 필수라 생각하자. 
#define EXPORT_API __declspec(dllexport)

//01. C side code
EXPORT_API void Scalars( double in, double *out ) {
		*out = in;
	}

// 02. C# side code
double invar = 5.0;
double outvar = 0.0;
Scalars(invar, ref outvar);		
Debug.Log( "invar = " + invar +  "outvar = " + outvar );		

포인터를 이용하여 invar의 값을 outvar 로 삽입이 되었다. 

C side에서 다르게 응용이 되어진다. 


 3.2 1차원 배열의 값을 주고 받자.

아래쪽 코드는 글자가 깨지는 관계로.....그냥 박스 상자에서 보시길. 

//01. C side code

EXPORT_API void OneDArray( double anArray[], int n ) {
for( int i=0; i<n; i++ ) {
anArray[i] = i;
}
};


// 02. C# side code

double [,] a2dArray = new double [3,2];
TwoDArray(a2dArray, a2dArray.GetLength(0), a2dArray.GetLength(1));
for( int i=0; i<3; i++) {
for( int j=0; j<2; j++ ){
Debug.Log( "array[" + i + "][" + j + "] = " + a2dArray[i,j] );
}

}


 3.3 2차원 배열을 주고 받자.
// 01. C side code
EXPORT_API void TwoDArray( double a2Array[], int m, int n ) {

		a2Array[0*n+0] = 1; // 0,0
		a2Array[1*n+0] = 2; // 1,0
		a2Array[2*n+1] = 3;	// 2,1
	}

// 02. C# side code
double [,] a2dArray = new double [3,2];				
        TwoDArray(a2dArray, a2dArray.GetLength(0), a2dArray.GetLength(1));
		for( int i=0; i<3; i++) {
			for( int j=0; j<2; j++ ){
				Debug.Log( "array[" + i + "][" + j + "] = " + a2dArray[i,j] );
			}
		}

 3.4 C,C#의 구조체를 주고 받자. 

// 01. C side code
struct myComplex {
	double re;
	double im;
};

EXPORT_API void TryComplex( myComplex inputVar, myComplex *outputVar, myComplex array[], int n ) {
		outputVar->re = ++inputVar.re;
		outputVar->im = ++inputVar.im;

		array[0].re = 99.0;
		array[0].im = 98.0;
		array[1].re = 97.0;
		array[1].im = 96.0;
	}

// 02. C# side code
Complex inputVar = new Complex();
		Complex outputVar = new Complex();
		Complex [] array = new Complex[3];
		inputVar.re = 1.0;
		inputVar.im = 2.0;
		TryComplex(inputVar, ref outputVar, array, array.GetLength(0));



 3.5 구조체의 동적할당을 이용하자. (미해결)

 - 다른 블로그 참조해서 해결하시기 바랍니다. 


<추가> Char/String 을 전달하는 방법

- 첨부파일을 참조하기 바람. 그리고 아래의 방법은 char을 사용하는 것.

// 01. C side code
void EXPORT_API ReadPort( char *filename ) {
		// for Read Port Number & Connect
	}

void EXPORT_API SendDataToSerialPort( char *ch ){
     if('q' == *ch) {
      }
	}

// 02. C# side code
	[DllImport("LibModule.dll")]	
	private static extern void ReadPort( char[] filename );

	[DllImport("LibModule.dll")]	
	private static extern void SendDataToSerialPort( char[] dir );


	void Start () {
		string str = "Port.txt";
		char[] szArr = str.ToCharArray();
		
		ReadPort (szArr);
		Debug.Log ("ReadPort");
	}

	void Update () {
		
		char[] ch = new char[1];
		
		if(Input.GetKeyUp(KeyCode.E)) { 				// Up
			Debug.Log ( Count++ + "KeyDown : E ");			
			ch[0] = 'e';
			SendDataToSerialPort(ch);
		}
	}



Reference


[1] htna 님의 블로그 ( http://htna.tistory.com/342 )
     - C와 C#통신하는 부분을 링크 해두었습니다. 위의 코드와 동일하나. 음....그대로 가따붙이니 안되네요.  조금 수정하였습니다. 


Posted by 모과이IT
,

NT에서의 SVN설치는 다소 쉽다.

1. 옮길려는 NT서버에 visualSVN Server 설치
- https://www.visualsvn.com/server/
- 무료인 Standard Edition 또는 유료 Enterprise Edition

2. Repositories 복사
- 원본 서버에서 VisualSVN Server Manager 실행
- [동작]-[모든작업]-[Start Comand Prompt] 실행

- svnadmin hotcopy 복사원본repository경로 복사위치
ex) svnadmin hotcopy d:/repositories/target d:/repos-backup2
- 또는 svnadmin dump 복사원본 복사위치
ex) svnadmin dump d:/repositories/target > d:/repos-backup2.dump

3. 복사된repositories를 옮길려는 NT서버로 복사
-일반적으로 c: 또는 d: 의 repositories 폴더 내

4. visualSVN server manager에서 좌측 repostitories 노드를 우클릭 후 [Import Existing Repository.]


5. Users 및 Groups 복사
- 원본 서버의 Repositories폴더 내 authz, authz-windows, htpasswd 파일을 복사하여 
신규 서버 내 Repositories폴더 내로 옮겨줌
-예전 버전 2 당시에는 authz 파일 내에 groups 정보가 들어 있었지만 3.3.0 버전 부터 groups.conf 파일로 옮겨짐
-따라서 다른 버전 간 복사시에는 authz 파일 내 [groups]부분 이하 내용을 groups.conf파일로 복사해줌


Move visualSVN to New NT server.

1. Install VisualSVN on new NT server.
- https://www.visualsvn.com/server/

2. Backup repositories
- excute "VisualSVN Server Manager"
- Click [Action]-[All tasks]-[StartCommand Prompt] on upper tab menu
- Using svnadmin hotcopy or svnadmin dump
ex) svnadmin hotcopy d:/repositories/target_repository d:/repos-backup2
ex) svnadmin dump d:/repositories/target_repository > d:/repos-backup2.dump

3. copy backup repositories files to new NT server

4. select repositories node and right clikc, then select [Import Existing Repository] 
on left space on visualSVN server manager on new NT server

5. copy Users and Groups
- If visualSVN is older than version 3.3 on older server, 
copy authz, authz-windows, htpasswd in "Repositories" folder to "Repositories" folder on New server
- copy contents of below [groups] in authz to groups.conf(It is groups info file upper version 3)



[출처]

http://egloos.zum.com/zeraf29/v/5892622

Posted by 모과이IT
,

https://support.office.com/en-us/article/Add-holidays-and-vacation-days-83497cbf-9b6e-4805-8603-2a89038290a0

Posted by 모과이IT
,

; Script generated by the HM NIS Edit Script Wizard.


; HM NIS Edit Wizard helper defines

!define PRODUCT_NAME "모과이캠"

!define PRODUCT_VERSION "1.0"

!define PRODUCT_PUBLISHER "문랩, Inc."

!define PRODUCT_WEB_SITE "http://www.mycompany.com"

!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\vcredist_x86.exe"

!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"

!define PRODUCT_UNINST_ROOT_KEY "HKLM"

BrandingText "문랩 모과이캠"

; MUI 1.67 compatible ------

!include "MUI.nsh"


; MUI Settings

!define MUI_ABORTWARNING

!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"

!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"


; Welcome page

!insertmacro MUI_PAGE_WELCOME

; License page

!insertmacro MUI_PAGE_LICENSE "..\lisence\moguwai.txt"

; Directory page

!insertmacro MUI_PAGE_DIRECTORY

; Instfiles page

!insertmacro MUI_PAGE_INSTFILES

; Finish page

!define MUI_FINISHPAGE_RUN "$INSTDIR\MOGUWAICam.exe"

!insertmacro MUI_PAGE_FINISH


; Uninstaller pages

!insertmacro MUI_UNPAGE_INSTFILES


; Language files

!insertmacro MUI_LANGUAGE "Korean"


; MUI end ------


Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"

OutFile "MOGUWAICamSetup.exe"

InstallDir "$PROGRAMFILES\MOONLAB\MOGUWAICam"

InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""

ShowInstDetails show

ShowUnInstDetails show


Section "MainSection" SEC01

  SetOutPath "$INSTDIR"

  SetOverwrite ifnewer

  File "..\vccorlib120.dll"

  File "..\msvcr120.dll"

  File "..\msvcp120.dll"

  File "..\mfc120u.dll"

  File "..\mfc120.dll"

  File "..\opencv_core248.dll"

  File "..\opencv_highgui248.dll"

  File "..\screen-capture-recorder.dll"

  File "..\vcredist_x86.exe"

  File "..\audio_sniffer.dll"

  File "..\ffmpeg.exe"

  File "..\MOGUWAICam.exe"

  ExecWait "$INSTDIR\vcredist_x86.exe /q"

  RegDLL "$INSTDIR\audio_sniffer.dll"

  RegDLL "$INSTDIR\screen-capture-recorder.dll"

  CreateDirectory "$SMPROGRAMS\모과이캠"

  CreateShortCut "$SMPROGRAMS\모과이캠\모과이캠.lnk" "$INSTDIR\MOGUWAICam.exe"

  CreateShortCut "$DESKTOP\모과이캠.lnk" "$INSTDIR\MOGUWAICam.exe"

SectionEnd


Section -AdditionalIcons

  WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"

  CreateShortCut "$SMPROGRAMS\모과이캠\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"

  CreateShortCut "$SMPROGRAMS\모과이캠\Uninstall.lnk" "$INSTDIR\uninst.exe"

SectionEnd


Section -Post

  WriteUninstaller "$INSTDIR\uninst.exe"

  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\vcredist_x86.exe"

  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"

  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"

  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\vcredist_x86.exe"

  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"

  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"

  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"

SectionEnd



Function un.onUninstSuccess

  HideWindow

  MessageBox MB_ICONINFORMATION|MB_OK "$(^Name)는(은) 완전히 제거되었습니다."

FunctionEnd


Function un.onInit

  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(^Name)을(를) 제거하시겠습니까?" IDYES +2

  Abort

FunctionEnd


Section Uninstall

  UnRegDLL "$INSTDIR\audio_sniffer.dll"

  UnRegDLL "$INSTDIR\screen-capture-recorder.dll"

  Delete "$INSTDIR\${PRODUCT_NAME}.url"

  Delete "$INSTDIR\uninst.exe"

  Delete "$INSTDIR\MOGUWAICam.exe"

  Delete "$INSTDIR\ffmpeg.exe"

  Delete "$INSTDIR\audio_sniffer.dll"

  Delete "$INSTDIR\vcredist_x86.exe"

  Delete "$INSTDIR\screen-capture-recorder.dll"

  Delete "$INSTDIR\opencv_highgui248.dll"

  Delete "$INSTDIR\opencv_core248.dll"

  Delete "$INSTDIR\mfc120.dll"

  Delete "$INSTDIR\mfc120u.dll"

  Delete "$INSTDIR\msvcp120.dll"

  Delete "$INSTDIR\msvcr120.dll"

  Delete "$INSTDIR\vccorlib120.dll"


  Delete "$SMPROGRAMS\모과이캠\Uninstall.lnk"

  Delete "$SMPROGRAMS\모과이캠\Website.lnk"

  Delete "$DESKTOP\모과이캠.lnk"

  Delete "$SMPROGRAMS\모과이캠\모과이캠.lnk"


  RMDir "$SMPROGRAMS\모과이캠"

  RMDir "$INSTDIR"


  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"

  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"

  SetAutoClose true

SectionEnd

Posted by 모과이IT
,

Unity3D에서 DLL Library 를 사용하자. 



01. Visual Studio  DLL Project 생성하기

Win32 Console Application으로 생성


02. DLL(dynamic) 로 설정

    - Empty project 체크 설정



03. Project Sources code


아래의 코드와 같이 작성. 

아래 GetNum Project 는 동작하지 않는다. 다른 예제를 보고 수정하도록 함. 

#define EXPORT_API __declspec(dllexport)

extern "C" {
	int EXPORT_API add( int a, int b) {
		return a+b;
	}
	void EXPORT_API GetNum( int n ) {
		n = 5;
	}
}


04. Unity3D Project 생성

     - Project 생성 후 Hierarchy cube 생성

     - C# script 생성



05. C# Script code

     - 아래와 같이 C#코드를 작성합니다. 

     - DLL을 Import 하기위해서는 아래와 같이 작성.  (아래 .dll 확장자가 붙어도 무관함)

       

    [DllImport("libTestforUnity3D2")]	
	private static extern int add( int a, int b);
	
	[DllImport("libTestforUnity3D2")]	
	private static extern void GetNum( int n);

      - Start() 함수 수정

// Use this for initialization
	void Start () {
		
		int r = add (50,51);
		
		int r2=0;		
		GetNum(r2);		
		
		Debug.Log("r1 = " + r + ", " + "r2 = " + r2);	
		
	}

06. 결과 화면




07. 이것저것 정리

 - Visual Studio 에서 코드를 작성하여 Unity3D 에 작성하는 방법은 간단.

 - 기타 다른 Blog 나 포럼을 참조하여도 됨. 그러나 될때가 있고 안되는 DLL library 형식이 있는 것 같다. 우짜노. 찾아봐야지. 

Posted by 모과이IT
,