蛋疼... ...
用Reflector看下Microsfot.VisualBasic.Interaction.CreateObjectde的源碼就知道了... ...
弄那麼複雜高深做什麼呢?
其實就是用
obj2 = Activator.CreateInstance(typeFromProgID);
實現的.
附帶源碼:
[code=csharp]
[SecurityPermission(SecurityAction.Demand, UnmanagedCode=true)]
public static object CreateObject(string ProgId, [Optional, DefaultParameterValue("")] string ServerName)
{
object obj2;
if (ProgId.Length == 0)
{
throw ExceptionUtils.VbMakeException(0x1ad);
}
if ((ServerName == null) || (ServerName.Length == 0))
{
ServerName = null;
}
else if (Thread.CurrentThread.CurrentCulture.CompareInfo.Compare(Environment.MachineName, ServerName, CompareOptions.IgnoreCase) == 0)
{
ServerName = null;
}
try
{
Type typeFromProgID;
if (ServerName == null)
{
typeFromProgID = Type.GetTypeFromProgID(ProgId);
}
else
{
typeFromProgID = Type.GetTypeFromProgID(ProgId, ServerName, true);
}
obj2 = Activator.CreateInstance(typeFromProgID);
}
catch (COMException exception)
{
if (exception.ErrorCode == -2147023174)
{
throw ExceptionUtils.VbMakeException(0x1ce);
}
throw ExceptionUtils.VbMakeException(0x1ad);
}
catch (Exception)
{
throw ExceptionUtils.VbMakeException(0x1ad);
}
return obj2;
}
[/code]
VB的CreateObject:
Microsoft.VisualBasic.Interaction.CreateObject(strProgID, strServer);
不止可以輸入Com 的ProgID, 還可以輸入機器位址,想請教C#中使用Activator 要如何指定COM元件所在的機器?
我添加了对NetFwTypeLib的引用,不过还是没那个INetFwPolicy2,只有INetFwPlicy,难道是操作系统的原因?
我的系统:Xp(Sp2) + Vs2005(sp1)
re: 在Vista中编程控制防火墙设定(C#) phytan 2008-06-23 18:51
程序中添加引用,在COM对象中找到"NetFwTypeLib"
INetFwPolicy2 这个是什么类型啊?怎么我在编译时提示“无法找到此类型”?
呵呵,这个好玩,有点像BCB里的 Variant::CreateObject
C#中实现VB中的CreateObject方法
这个标题意思就是Activator.CreateInstance可以干CreateObject的事情??
不懂VB被你搞糊涂了.
Activator.CreateInstance自然能动态创建对象,要不然要反射干吗
这个只是小程序啊 ,你对比着看那VB和C#的例子就行了.
............................
挺有意思的,不错。前段时间用c++做个类似于优化大师的工具,对网络这方面到没怎么考虑到,收藏下。