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;
}
}
}
'Program > C#' 카테고리의 다른 글
레지스트리 값 읽고, 쓰기 방법 2 (0) | 2011.03.24 |
---|---|
레지스트리에 값 읽고, 쓰고, 삭제 (0) | 2011.03.24 |
C#에서 Win32 API 사용하기2 (0) | 2011.03.24 |
웹페이지 자동로그인 구현 (0) | 2011.03.24 |
급여 계산 (0) | 2011.03.24 |