| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
|
'Common C#/C# 유용한 퍼온자료'에 해당되는 글 4건
- 2009.05.22 크레들리 연결 상태 체크
- 2009.02.24 ㅠㅠ
- 2008.12.10 C# API 사용하기 #2
- 2008.12.10 API 이용 정보 #1
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Xml;
using System.IO;
namespace Hynix.Core
{
/// <summary>
/// Sql Command 실행을 도와주는 클래스
/// </summary>
public class SqlHelper
{
public static void ExcuteCommand(string strConn, string strCmd)
{
ExcuteCommand(strConn, strCmd, false, null);
}
public static void ExcuteCommand(SqlTransaction tran, string strCmd)
{
ExcuteCommand(tran, strCmd, false, null);
}
public static void ExcuteCommand(SqlTransaction tran, string strCmd, bool IsSP, SqlParameter[] oParams)
{
SqlCommand oCmd = new SqlCommand(strCmd, tran.Connection, tran);
oCmd.CommandTimeout = int.Parse(Config.Instance.GetValue("TIMEOUT"));
if (IsSP == true) { oCmd.CommandType = CommandType.StoredProcedure; }
if (oParams != null)
{
for (int i = 0; i < oParams.Length; i++)
{
oCmd.Parameters.Add(oParams[i]);
}
}
oCmd.ExecuteNonQuery();
}
public static void ExcuteCommand(string strConn, string strCmd, bool IsSP, SqlParameter[] oParams)
{
if (strConn.IndexOf("Connect Timeout") < 0)
{
strConn += ";Connect Timeout=" + Config.Instance.GetValue("TIMEOUT") + ";";
}
SqlConnection oConn = new SqlConnection(strConn);
SqlCommand oCmd = new SqlCommand(strCmd, oConn);
oCmd.CommandTimeout = int.Parse(Config.Instance.GetValue("TIMEOUT"));
if (IsSP==true)
{
oCmd.CommandType = CommandType.StoredProcedure;
if (oParams != null)
{
for (int i = 0; i < oParams.Length; i++)
{
oCmd.Parameters.Add(oParams[i]);
}
}
}
oConn.Open();
oCmd.ExecuteNonQuery();
oConn.Close();
}
public static DataSet ExcuteDataSet(string strConn, string strCmd)
{
return ExcuteDataSet(strConn, strCmd, false, null);
}
public static DataSet ExcuteDataSet(string strConn, string strCmd, bool IsSP, SqlParameter[] oParams)
{
if (strConn.IndexOf("Connect Timeout") < 0)
{
strConn += ";Connect Timeout=" + Config.Instance.GetValue("TIMEOUT") + ";";
}
SqlConnection oConn = new SqlConnection(strConn);
SqlCommand oCmd = new SqlCommand(strCmd, oConn);
oCmd.CommandTimeout = int.Parse(Config.Instance.GetValue("TIMEOUT"));
if (IsSP==true)
{
oCmd.CommandType = CommandType.StoredProcedure;
if (oParams != null)
{
for (int i = 0; i < oParams.Length; i++)
{
oCmd.Parameters.Add(oParams[i]);
}
}
}
SqlDataAdapter da = new SqlDataAdapter(oCmd);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
}
C#에서 Win32 API 사용하기
개요
Win32 API를 불러올 때, 함수의 명칭, 인자, 리턴 값을 가지고 불러오게 되어 있다. 하지만, C#에서 타입들이 모두 객체(Object)의 형식이며, 일반적인 C 의 데이터 형과 상이한 모양을 가진다. 이러한 문제들을 해결할 수 있는 것이 PInvoke 기능이다.
PInvoke( Platform Invocation Service)는 관리화 코드에서 비관리화 코드를 호출할 방법을 제공한다. 일반적인 용도는 Win32 API의 호출을 위해 사용한다.
namespace PinvokeExample { using System; using System.Runtime.InteropServices; // 반드시 입력해야 한다. public class Win32 { [DllImport(“user32.dll”)] public static extern int FindWindow(string a, string b); … } } |
위 예제는 FindWindow라는 user32.dll의 C함수를 사용하는 모습을 보여주고 있다. 실제 FindWindow의 선언은 다음과 같다.
HWND FindWindow(LPCSTR swClassName, LPCSTR swTitle); |
HWND는 윈도우 핸들을 표현하는 32비트 정수 이므로, int형으로 치환되고 LPCSTR 형은 NULL로 끝나는 문자열을 표현한다. 이때 PInvoke는 string을 자동으로 LPCSTR로 치환해 주는 역할을 하게 된다.
이 문서에서는 이처럼 Win32 API 함수의 여러 유형들을 어떻게 C#에서 사용 할 것인지에 대하여 알아보자.
Pinvoke 라는 기법을 사용하시면 됩니다.
Pinvoke 는 닷넷에서 자체적으로 제공되지 않는 외부 함수를 호출하는 방법입니다.
관리 코드가 아닌 비 관리 코드를 사용하는 방법이라 보시면 되겠습니다. api 호출 등이 Pinvoke 죠.
닷넷에서 시스템 관련 작업이나 윈도용 어플리케이션을 개발하다보면 부득이하게 Pinvoke 기법을 쓸 수 밖에 없죠.
특히 c 를 하다 넘어가면 api 때문에 빈번하게 Pinvoke 를 활용하는데 그에 해당하는 문서 중에선 정리가 잘된게
있어서 퍼 옵니다.
"c계열이 최고다"는 아니지만 c# 이나 asp.net 부터 프로그래밍을 배운 분들이더라도 앞으로 윈도 프로그래밍을
하실거면 각종 API 관련 공부를 해두시는게 개발하는데 큰 도움이 됩니다.
닷넷 프레임웍이 버젼업하면서 라이브러리에서 제공되는 클래스&메소드가 늘어가긴 한다지만 제공 하기 전까진
Pinvoke 활용도가 높을겁니다.
더 상세 정보는 http://www.pinvoke.net/ 여기로..
---------------------------------------------------------------------------