실제로 4.5 이상에서 제공되는 새로운 태그 캐시 방법을 사용하는 것이 좋습니다. 내가 사용하는 DLL 가져 오기 정의는 다음과 같습니다. 1
[DllImport("ihuapi.dll", EntryPoint = "[email protected]")]
public static extern IntPtr CreateTagCacheContext();
[DllImport("ihuapi.dll", EntryPoint = "[email protected]")]
public static extern ErrorCode CloseTagCacheEx2(IntPtr TagCacheContext);
[DllImport("ihuapi.dll", EntryPoint = "[email protected]")]
public static extern ErrorCode FetchTagCacheEx2(IntPtr TagCacheContext, int ServerHandle, string TagMask, ref int NumTagsFound);
[DllImport("ihuapi.dll", EntryPoint = "[email protected]")]
public static extern ErrorCode GetTagnameCacheIndexEx2(IntPtr TagCacheContext, string Tagname, ref int CacheIndex);
[DllImport("ihuapi.dll", EntryPoint = "[email protected]")]
public static extern ErrorCode GetNumericTagPropertyByIndexEx2(IntPtr TagCacheContext, int Index, TagProperty TagProperty, ref double Value);
[DllImport("ihuapi.dll", EntryPoint = "[email protected]")]
public static extern ErrorCode GetStringTagPropertyByIndexEx2(IntPtr TagCacheContext, int Index, TagProperty TagProperty, StringBuilder Value, int ValueLength);
그런 다음 다음과 같은 코드를 사용할 수 있습니다.
1내 코드가 약간 다를 수 있지만 차이는 대부분 사소한해야한다, 그래서 나는 GE가 제공하는 제공하는 DLL 가져 오기 정의를 사용하지 마십시오
IntPtr context = IntPtr.Zero;
try
{
context = IHUAPI.CreateTagCacheContext();
if (context != IntPtr.Zero)
{
int number = 0;
ihuErrorCode result = IHUAPI.FetchTagCacheEx2(context, Connection.Handle, mask, ref number);
if (result == ihuErrorCode.OK)
{
for (int i = 0; i < number; i++)
{
StringBuilder text = new StringBuilder();
IHUAPI.GetStringTagPropertyByIndexEx2(context, i, ihuTagProperties.Tagname, text, 128);
Console.WriteLine("Tagname=" + text.ToString());
}
}
}
}
finally
{
if (context != IntPtr.Zero)
{
IHUAPI.CloseTagCacheEx2(context);
}
}
.