为什么下面这段程序在32位系统下是好的,可是到了64为下面变量service就返回空? object Unk = null;
try
{
comServiceProvider.QueryService(ref serviceId, ref unknownGuid, out Unk);
}
catch (System.Exception) { } if (Unk != null)
{
IntPtr unkptr = Marshal.GetIUnknownForObject(Unk);
//object obj = Marshal.GetUniqueObjectForIUnknown(unkptr);
//Guid gd = Marshal.GenerateGuidForType(obj.GetType());
//if (obj is TServ)
service = Marshal.GetUniqueObjectForIUnknown(unkptr) as TServ;
}
try
{
comServiceProvider.QueryService(ref serviceId, ref unknownGuid, out Unk);
}
catch (System.Exception) { } if (Unk != null)
{
IntPtr unkptr = Marshal.GetIUnknownForObject(Unk);
//object obj = Marshal.GetUniqueObjectForIUnknown(unkptr);
//Guid gd = Marshal.GenerateGuidForType(obj.GetType());
//if (obj is TServ)
service = Marshal.GetUniqueObjectForIUnknown(unkptr) as TServ;
}
试试用x86编译(以便运行在Wow64下)。
默认是any cpu编译。
我在注册表里发现多出wow6432Node信息
这就要求你的程序将就它。用Any CPU编译的在64位下会尝试 装入64位Dll,所以让你试着改成X86。
我右点击COM工程(c++),选择属性,但是发现没有Any CPU,只有win32,其他c#工程都很正常,为什么?