Autohotkey 를 사용하여 특정 폴더에 있는 특정 확장자의 파일 수를 세기 위해 함수를 하나 만들어 봤습니다. Autohotkey 에서는 Loop 문을 통해 특정 확장자 파일 모두에 대해 접근을 할 수 있고 루프를 돌 때마다 A_Index 값이 증가 합니다. 이를 사용하면 파일의 갯수를 셀 수 있습니다. 다수의 특정 확장자 입력을 받을 수 있도록 했습니다.

코드는 다음과 같습니다.






위 코드중 제가 만든 함수는 fileCount() 이고 다음과 같이 폴더와 확장자를 지정하면 해당 폴더에 있는 특정 확장자의 갯수가 몇개인지를 알려 주는 함수 입니다. 확장자는 여러개를 순차적으로 넣으면 되고 아래 예에서는 jpg, png 파일을 찾도록 한 것입니다.

directV=C:\testFolder

N_Files := fileCount(directV, "jpg", "png")

그런데 검색을 조금 해 보니 특정폴더에 파일 개수를 찾기 위해서 Windows COM 을 사용하는 방법도 있더군요. Scripting.FileSystemObject, Shell.Application 등을 사용하는 방법이었으며 해당 방법들을 사용해도 동일한 결과를 얻을 수 있습니다. COM 을 사용하는 예에서 Shell.Application 을 사용하여 Item 의 갯수를 찾는 경우 숨김폴더는 제외한 갯수를 알려 주더군요.



이전 포스팅에서 C# 으로 만들어진 DLL 을 Autohotkey 에서 사용하는 방법에 대해 알아 봤는데요. 

http://iamaman.tistory.com/2042

오늘은 C# 으로 만들어진 DLL을 Powershell 에서 사용하는 방법에 대해 알아보려 합니다. 

예제를 위한 C# 코드는 아래와 같습니다. 위 포스팅에서의 예제와 다른 점이라면 static 함수가 있다는 겁니다.



-test.cs-


using System;

namespace myDLL

{

public class Calculator

{

public static int  Sub(int a, int b)

{

return a - b;

}

public int Add(int a, int b)

{

return a + b;

}

public int increase(int var)

{

var++;

return var;

}

}

}

다음과 같이 C# 코드를 dll 파일로 빌드 합니다.

csc.exe /target:library test.cs


이렇게 만들어진 dll 파일을 Powershell 에서 로드하기 위해 아래와 같이 명령 합니다.

Add-Type -Path "DLL 파일 path"   

EX ) Add-Type -Path "E:\workspace\2017-12-27\test.dll"


이제 위에서 만든 dll 이 로드 됐으므로 myDLL namespace 의 Calculator 클래스를 사용할 수 있습니다. 

Powershell 에서 static 함수 호출은 아래와 같이 합니다.

[myDLL.Calculator]::Sub(2,3)

-1

다음으로 멤버 함수를 불러오기 위해서는 instance 를 생성 한 후에 호출 해 주면 됩니다. Powershell 코드는 아래와  같습니다. 

$test = New-Object -TypeName myDLL.Calculator

$test.Add(2,3)

5

Powershell 에서 전체 실행은 아래와 같습니다.



C/C++ 코딩시 매크로는 #define 을 사용하여 다음과 같이 정의하곤 합니다.

 

단순하게 상수등을 다음과 같이 정의하곤 하지만~

 

#define PI     (3.141592)

 

상수 뿐만이 아니라 매개변수등도 이용할 수가 있습니다.

 

사용법은 굉장히 단순한데요.

 

다음과 같이 원의 넓이를 구하는 매크로를 구성할 수 있습니다.

 

#define CIRCLE(x) ((x)*(x)*(PI))

 

매크로 정의시에는 항상 모든 부분들을 괄호를 이용하여 꼼꼼하게~ 묶어 주는 게 좋습니다. 그렇지 않으면~~ 까딱 잘못하다가 예상치 못한 결과를 얻을 수 있거덩여~

 

다음으로 # 연산자를 간단하게 소개하겠습니다.

 

이미 많은 분들이 아시겠지만, # 연산자는 매개변수를 문자화 하는 연산자 입니다.

 

다음과 같이 사용합니다.

 

#define STRING(x) #x

 

위와 같이 define 을 하고 STRING(Character) 하면~ " Character" 라고 문자열로 정의한것과 마찬가지 입니다.

 

이제 마지막으로 ## 연산자에 대해 소개해 드리죠~

 

아래와 같이 정의하고~

#define X(n) x##n

 

X(1) 이라고 하면~ 이는 변수 x1 을 입력한 것과 동일합니다. 즉. ## 연산자는 토큰들을 결합하는 역할을 하는거죠.

 

x1, x2, x3 …. 등과 같이 정의하고 싶다면~ ## 연산자를 이용해서 처리 할 수 있겠죠~

 

위 설명한 부분에 대해 간단하게 예제를 만들어 보았습니다.

 

#include <iostream>

 

using namespace std;

 

 

#define PI     (3.141592)

 

#define CIRCLE(x) ((x)*(x)*(PI))

#define STRING(x) #x

 

#define INT_X(n) int x##n = n

#define COUT_X(n) cout << "x"#n" = " << x##n <<endl

 

 

int main()

{

// 원의 넓이

cout << "반지름 4인 원의 넓이 : " << CIRCLE(4) << endl ;

 

// 매크로 # 연산자

cout << "# 연산자 예 : " << STRING(문자열로~) << endl ;

 

// 매크로 ## 연산자

 

INT_X(0);

INT_X(1);

INT_X(2);

INT_X(3);

 

COUT_X(0);

COUT_X(1);

COUT_X(2);

COUT_X(3);

 

 

return 0;

}

 

위 코드를 실행 시켜 보면 다음과 같은 결과가 나타납니다.


#, ## 연산자를 이용한 매크로는 디버그시 특히 유용하다 하더군요~ 


아래 주소에서 macro 에 대한 좋은 예들을 볼 수 있다.  

http://www.cprogramming.com/tutorial/cpreprocessor.html



+ Recent posts