为什么下面这段程序在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;
                    
                }

解决方案 »

  1.   

    com 是 二进制 标准, 接口函数有个函数表,32 位代码 指针 +4 取得下一个函数64 位 则要 +8 才行.重新编译, 或者找找替代方案.
      

  2.   

    :)
    试试用x86编译(以便运行在Wow64下)。
    默认是any cpu编译。
      

  3.   

    这个和COM的注册有关系吗?
    我在注册表里发现多出wow6432Node信息
      

  4.   

    你的COM很有可能使32位的。
    这就要求你的程序将就它。用Any CPU编译的在64位下会尝试 装入64位Dll,所以让你试着改成X86。
      

  5.   

    谢谢楼上的回答
    我右点击COM工程(c++),选择属性,但是发现没有Any CPU,只有win32,其他c#工程都很正常,为什么?
      

  6.   

    不是改COM工程(c++)。是改你的C#工程(com调用者)。