Dreamine.PLC.Mitsubishi.MxComponent
1.0.1
Dreamine.PLC.Mitsubishi.MxComponent 산업 자동화 및 I/O 기능을 제공합니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
DefaultComObjectFactory.cs
이 파일의 문서화 페이지로 가기
1
using
System.Reflection;
2
3
namespace
Dreamine.PLC.Mitsubishi.MxComponent.Internal
;
4
13
public
sealed
class
DefaultComObjectFactory
:
IComObjectFactory
14
{
63
public
object
Create
(
string
progId)
64
{
65
if
(!OperatingSystem.IsWindows())
66
{
67
throw
new
PlatformNotSupportedException(
"MX Component COM controls are supported on Windows only."
);
68
}
69
70
if
(
string
.IsNullOrWhiteSpace(progId))
71
{
72
throw
new
ArgumentException(
"COM ProgID must not be empty."
, nameof(progId));
73
}
74
75
if
(Environment.Is64BitProcess && progId.Equals(
"ActUtlType.ActUtlType"
, StringComparison.OrdinalIgnoreCase))
76
{
77
progId =
"ActUtlType64.ActUtlWrap"
;
78
}
79
80
if
(Environment.Is64BitProcess && progId.StartsWith(
"ActUtlType64."
, StringComparison.OrdinalIgnoreCase))
81
{
82
return
CreateDotUtlType64Wrapper
();
83
}
84
85
Type? type;
86
try
87
{
88
type = Type.GetTypeFromProgID(progId, throwOnError:
false
);
89
}
90
catch
(Exception ex)
91
{
92
throw
CreateFriendlyException
(progId, ex);
93
}
94
95
if
(type is
null
)
96
{
97
throw
CreateFriendlyException
(progId);
98
}
99
100
try
101
{
102
return
Activator.CreateInstance(type)
103
??
throw
new
InvalidOperationException($
"Failed to create MX Component COM object: {progId}"
);
104
}
105
catch
(Exception ex)
106
{
107
throw
CreateFriendlyException
(progId, ex);
108
}
109
}
110
151
private
static
object
CreateDotUtlType64Wrapper
()
152
{
153
var assemblyPath =
FindDotUtlType64AssemblyPath
();
154
if
(assemblyPath is
null
)
155
{
156
throw
new
InvalidOperationException(
157
"MX Component 64-bit wrapper assembly was not found. Expected DotUtlType64.dll under the MELSOFT ACT Control Wrapper folder."
);
158
}
159
160
var assembly = Assembly.LoadFrom(assemblyPath);
161
var type = assembly.GetType(
"DotUtlType64.DotUtlType64"
, throwOnError:
false
)
162
??
throw
new
InvalidOperationException($
"DotUtlType64.DotUtlType64 type was not found in {assemblyPath}."
);
163
164
return
Activator.CreateInstance(type)
165
??
throw
new
InvalidOperationException($
"Failed to create DotUtlType64.DotUtlType64 from {assemblyPath}."
);
166
}
167
184
private
static
string
?
FindDotUtlType64AssemblyPath
()
185
{
186
var candidates =
new
[]
187
{
188
Path.Combine(
189
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),
190
"MELSOFT"
,
191
"ACT"
,
192
"Control"
,
193
"Wrapper"
,
194
"DotUtlType64.dll"
),
195
Path.Combine(
196
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86),
197
"MELSOFT"
,
198
"ACT"
,
199
"Control"
,
200
"DotUtlType64.dll"
)
201
};
202
203
return
candidates.FirstOrDefault(File.Exists);
204
}
205
238
private
static
InvalidOperationException
CreateFriendlyException
(
string
progId, Exception? innerException =
null
)
239
{
240
var bitness = Environment.Is64BitProcess ?
"x64"
:
"x86"
;
241
return
new
InvalidOperationException(
242
$
"MX Component COM '{progId}' is not registered for the current {bitness} process. "
+
243
"For a 64-bit process, try ProgID 'ActUtlType64.ActUtlWrap'. For a 32-bit process, try 'ActUtlType.ActUtlType'. "
+
244
"Check MX Component Communication Setup Utility and confirm the Logical Station Number."
,
245
innerException);
246
}
247
}
Dreamine.PLC.Mitsubishi.MxComponent.Internal
Definition
ComInvoker.cs:5
Dreamine.PLC.Mitsubishi.MxComponent.Internal.DefaultComObjectFactory
Definition
DefaultComObjectFactory.cs:14
Dreamine.PLC.Mitsubishi.MxComponent.Internal.DefaultComObjectFactory.CreateDotUtlType64Wrapper
static object CreateDotUtlType64Wrapper()
Definition
DefaultComObjectFactory.cs:151
Dreamine.PLC.Mitsubishi.MxComponent.Internal.DefaultComObjectFactory.CreateFriendlyException
static InvalidOperationException CreateFriendlyException(string progId, Exception? innerException=null)
Definition
DefaultComObjectFactory.cs:238
Dreamine.PLC.Mitsubishi.MxComponent.Internal.DefaultComObjectFactory.Create
object Create(string progId)
Definition
DefaultComObjectFactory.cs:63
Dreamine.PLC.Mitsubishi.MxComponent.Internal.DefaultComObjectFactory.FindDotUtlType64AssemblyPath
static ? string FindDotUtlType64AssemblyPath()
Definition
DefaultComObjectFactory.cs:184
Dreamine.PLC.Mitsubishi.MxComponent.Internal.IComObjectFactory
Definition
IComObjectFactory.cs:12
Internal
DefaultComObjectFactory.cs
다음에 의해 생성됨 :
1.17.0