제임스딘딘의
Tech & Life

[C#] .NET 이 아닌 native 코드로 작성된 외부 DLL 사용 방법(파라미터의 타입을 알 수 없는 경우)

외부 메소드의 파라미터가 char* 인 경우(데브피아 C# 마을, 질문&답변) (원본: http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNO=8&no=120108&ref=120099&page=3#Contents120108) 가장 일반적으로 포인터로 넘겨서 값을 받아올경우 할당되어 있는 방으로 넘겨 받아야 합니다. 하지만 DllImportAttribute 클래스를 이용하여 맵핑 하시기에 어려움을 겪으시는것 같네요. 해당 매개변수는 호출지점에 구도에 따라 string, StringBuilder, byte, unsafe.... 맵핑이 가능합니다. 원초적인 방법으로 IntPtr 을 이용한 메모리 활당하여 이용하는 방법도 가능합니다. 사용하시는 ..

[C#] 메소드 동기화

동기화를 원하는 몇개의 메소드가 클래스 안에 있다고 가정하자. (물론 그것들은 여러개의 스레드에 의해 동시에 사용될 수 없게 하려는 상황이라고 가정한다.) 자바 프로그래머라면 스레드 사용시 메소드 동기화를 위해 단지 다음과 같은 방법을사용 하면 된다는걸 알고 있을것이다. public synchronized void methodName() {...} C#에서는 이와같은 효과를 주기 위해 어떻게 해야 할까. 자바를 먼저 공부했던 나는 C#을 공부하면서 이와같은 의문을 가졌고, 찾은 해결방법은 다음과같다. 방법1. Just wrap the entire content of your method in a lock statement. (메소드의 전체내용을 lock 문장으로 둘러 싸면 된다) public class ..

[C#] 구조체

구조체는 클래스와 동일한 구문으로 대부분 형식을 공유하지만 클래스보다 제한적이며 다음과 같은 특징을 갖는다. ▷ 구조체는 값 형식이고 클래스는 참조 형식이다. ▷ 클래스와 달리 구조체는 new 연산자를 사용하지 않고 인스턴스화 할 수 있다. ▷ 구조체는 생성자를 선언할 수 있으나 반드시 매개 변수를 사용해야 한다. ▷ 구조체는 다른 구조체 또는 클래스에서 상속될 수 없으며, 클래스의 기본 클래스가 될 수 없으며 모든 구조체는 System.Object 를 상속하는 System.ValueType에서 직접 상속한다. ▷ 구조체는 인터페스이를 구현할 수 있다. ▷ 구조체를 nullable 형식으로 사용할 수 있고 여기에 null값을 할당할 수 있다. ▷ 구조체 선언 내에서 필드는 const 또는 static으로..

1