일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 주신영
- 마이크로소프트
- 거제도
- MIX10
- 윈도우폰
- 실버라이트 코리아
- 지승욱
- 신동혁
- 황광진
- 소년포비소프트
- 스마트폰
- 윈도우 모바일
- 옴니아2
- 신석현
- 윈도데브
- 윈도우모바일
- 헤이맨
- 훈스닷넷
- UX베이커리
- 안드로이드
- 데브피아
- winmodev
- 김춘배
- 윈모데브
- 루나네스
- 서진호
- 쉐어포인트코리아
- 소년포비
- windows mobile 6.5
- 윈도우폰7
- Today
- Total
소년포비의 세계정복!!
[C#] C#에서 C++ DLL의 Call by Referance out 인수 사용하는 방법 본문
C# 프로그래밍을 하다보면 C++에서 만들어 둔 DLL을 사용해야 할 경우가 많이 있지요.
in 기능의 인수들을 그냥 대충 바꾸면 되는데
out 기능의 포인터를 사용한 Call by Referance 인수들을 참 난감합니다.
그러나 아래와 같이 선언하면 사용이 가능합니다.
참고 하세요.
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace SolarCellDGUI
{
class SCMInterface
{
[DllImport("P:SolarCell_CTCShellExecDllsSCMBusClient.dll")]
public static extern int ConnectToSCM(string MyIPAddr,
[MarshalAs(UnmanagedType.LPArray)] Int32[] ConnectionID,
[MarshalAs(UnmanagedType.LPArray)] byte[] EquipmentName);
[DllImport("P:SolarCell_CTCShellExecDllsSCMBusClient.dll")]
public static extern int DisconnectFromSCM(string MyIPAddr, int ConnetionID);
[DllImport("P:SolarCell_CTCShellExecDllsSCMBusClient.dll")]
public static extern int SendEventToSCM(int ConnectionID, string Source,
string Destination, string EventName, string EventData, int EventDataLen,
[MarshalAs(UnmanagedType.LPArray)] byte[] ResultData,
[MarshalAs(UnmanagedType.LPArray)] Int32[] ResultDataLen);
public bool SendEventSCM(int ConnectionID, string Source, string Destination,
string EventName, string EventData, int EventDataLen, ref string ResultData, ref int ResultDataLen)
{
int res = 0;
byte[] resData = new byte[100];
Int32[] resDataLen = new Int32[1];
char[] tempchr = new char[100];
int i;
res = SendEventToSCM(ConnectionID, Source, Destination, EventName, EventData,
EventDataLen, resData, resDataLen);
if (res == 1)
{
ResultDataLen = resDataLen[0];
for (i = 0; i < 100; i ++)
tempchr[i] = System.Convert.ToChar(resData[i]);
ResultData = new string(tempchr);
return true;
}
else
{
return false;
}
}
public bool ConnectSCM(string MyIPAddr, ref int ConnectionID, ref string EquipmentName)
{
int res = 0;
byte[] eqpName = new byte[80];
Int32[] conID = new Int32[1];
char[] tempchr = new char[80];
int i;
res = ConnectToSCM(MyIPAddr, conID, eqpName);
if (res == 1)
{
ConnectionID = conID[0];
for (i = 0; i < 80; i++)
tempchr[i] = System.Convert.ToChar(eqpName[i]);
EquipmentName = new string(tempchr);
return true;
}
else
{
return false;
}
}
public bool DisconnectSCM(string MyIPAddr, int ConnetionID)
{
int res = 0;
res = DisconnectFromSCM(MyIPAddr, ConnetionID);
if (res == 1)
return true;
else
return false;
}
}
}
'프로그램 세상 > C#' 카테고리의 다른 글
[C#] BMP 이미지 회전 및 대칭 회전 (0) | 2009.10.24 |
---|---|
[C#] 콘트롤 마우스 클릭후 드래그 이동시키기 (0) | 2009.10.24 |
[C#]C#에서 Win32 API 사용하기2 (0) | 2009.10.24 |
[C#] 웹페이지 자동로그인 구현 (0) | 2009.10.24 |
[C#] 람다식(Lambda Expression) (0) | 2009.10.22 |