반응형

프로젝트의 속성창에서,

1. 빌드 탭의 플랫폼 대상을 'x86'으로 선택해 준다.

2. 빌드이벤트 탭의 빌드 후 이벤트 명령줄에 다음과 같이 추가해 주면 된다.

call "$(VS100COMNTOOLS)..\tools\vsvars32.bat"
editbin /largeaddressaware $(TargetPath)

이렇게 해서 빌드된 실행파일은, 32bit 실행파일이지만 64bit 메모리 주소값을 사용할 수 있게 된다.

32bit인데 OutOfMemory 에러가 나는 경우 적용할 수 있는 해결책이다.

반응형

'프로그래밍' 카테고리의 다른 글

cmd 파일 검색 팁  (0) 2023.06.21
HTML5 오로라  (0) 2020.11.27
HTML5 불꽃놀이  (0) 2020.07.15
HTML의 DOCTYPE 선언은 정말 중요하다.  (0) 2019.11.02
잘 되던 톰캣이 갑자기 실행 안될 때  (0) 2019.09.07
반응형

C#에서, Form에 구현된 컨트롤을 Form이 아닌 다른 클래스에서 호출하려 하면,

다음과 같은 에러가 발생한다.

크로스 스레드 작업이 잘못되었습니다. 'xxxx' 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스되었습니다.


C#에서 UI 컨트롤들은, 자신이 만들어진 쓰레드에서만 엑세스될 수 있게 되어 있다.

하지만, 종종 다른 쓰레드에서 엑세스 해야 하는 경우가 있기 마련이다.

이런 경우에는, 컨트롤의 InvokeRequired 속성을 이용하여 

대리자 호출을 해야 되는 상황인지를 판단하여

직접호출을 하거나 대리자 호출을 하면 된다.

이에 대한 설명은, 다음 사이트에 잘 나와 있다.


다음은, 실제 사용 샘플이다.

delegate void deleg_log(object content, params object[] args);

public void log(object content, params object[] args)
{
    if (InvokeRequired)
    {
        deleg_log call = new deleg_log(log);
        Invoke(call, content, args);
    } else {            
        if (txtResult.Text.Length > 2000)
            txtResult.Text = String.Format(content.ToString(), args) + 
                                  txtResult.Text.Substring(0, 2000);
        else
            txtResult.Text = String.Format(content.ToString(), args) + txtResult.Text;
    }
}


반응형
반응형

생성자에서 다른 생성자 호출하는 방법

Java, C# 등에서 클래스를 생성할 때,

인수별로 여러 개의 생성자를 만들 수 있다.

예를 들어, 다음과 같은 식이다.

Class A {

public A() {

.....

}


public A(int param1) {

.....

}


public A(int param1, param2) {

.....

}

}


이 때, 생성자에서 다른 생성자를 호출하는 경우, this라는 키워드를 사용하는데,

Java와 C#의 문법이 조금 다르다.


1) 먼저, Java문법을 살펴보면, 다음과 같다.

Class A {

public A() {

this(10);

.....

}


public A(int param1) {

this(param1, 20);

.....

}


public A(int param1, param2) {

.....

}

}


2) 반면, C#에서는 다음과 같이 해야 한다.

Class A {

public A() : this(10) {

.....

}


public A(int param1) : this(param1, 20) {

.....

}


public A(int param1, param2) {

.....

}

}


반응형
반응형

C# Tips!! 한글과 영어가 섞인 경우의 Format 정렬

 

C#에서 문자열 출력시, 한글 한글자는 영어 2글자 분의 자리를 차지한다.

따라서 일반적인 정렬 방식을 쓰게 되면, 한글과 영어의 차이 때문에 정렬이 안된다.

이럴 때는 바이트수를 계산해서 출력해 주어야 자리수를 맞출 수 있다.

가령, 한글이냐 영어냐에 상관 없이 영어 열자리 간격에 맞추어 오른쪽 정렬로 출력하려면,

다음과 같이 하면 된다.


String strToPrint = "출력할 문자열";

int padLen = 10 - Encoding.Default.GetBytes(strToPrint).Length;

Console.WriteLine("{0}", "".PadLeft(padLen) + strToPrint);


또는, 다음과 같은 방법도 있다.

String strToPrint = "출력할 문자열";

byte[] byte1 = Encoding.Default.GetBytes(strToPrint  + "          ");

byte[] byte2 = new byte[10];

Array.Copy(byte1, byte2, 10);

Console.WriteLine("{0}", Encoding.Default.GetString(byte2));

반응형

+ Recent posts