积极答复者
编译、注册DLL在不同windows下的兼容性问题

问题
-
IE异步协议需要编写DLL来实现,建一个类库项目,导入一大堆COM里的东西,选择密钥、选择对COM开放。。。然后编译,再使用gacutil.exe和regAsm进行注册。
现在遇到问题是,就算不同机器上.net平台版本相同,VS版本相同,XP下编译后在本机能使用的DLL放到win7下就不能用。反之亦然。异常提示"与预期值不一样"。我知道可能和项目GUID及项目里类的GUID有关。对此我进行了各种尝试(项目GUID和类GUID相同或不同,是否在编译选择注册COM Interop),还是不能兼容不同windows平台(上面.net运行库版本一样)。我想请教下这方面专家,还有什么因素会导致这种.net版本的COM DLL如此难以使用?如果难以兼容,微软弄出这玩意来干嘛?
答案
-
- 已标记为答案 CaillenModerator 2014年1月6日 1:49
全部回复
-
public static class RegisterApp { [DllImport("urlmon.dll")] private static extern void CoInternetGetSession(uint sessionMode, ref IInternetSession session, uint reserved); [DllImport("ole32.dll", ExactSpelling = true, CharSet = CharSet.Unicode)] public static extern int CoGetClassObject( ref Guid rclsid, CLSCTX dwClsContext, IntPtr pServerInfo, ref Guid riid, [Out, MarshalAs(UnmanagedType.Interface)] out object ppv); public const uint CLSCTX_INPROC_SERVER = 1; public const uint CLSCTX_INPROC_HANDLER = 2; public const uint CLSCTX_LOCAL_SERVER = 4; public const uint CLSCTX_SERVER = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER; public static void Register() { object ic = new object(); Guid guid = new Guid("1c470f4b-0486-4558-80c7-ad08d652a465"); Guid guid2 = new Guid("00000001-0000-0000-C000-000000000046"); CoGetClassObject(ref guid, CLSCTX.INPROC_SERVER | CLSCTX.LOCAL_SERVER, IntPtr.Zero, ref guid2, out ic); IInternetSession s = null; CoInternetGetSession(0, ref s, 0); s.RegisterMimeFilter((IClassFactory)ic, ref guid, "text/html");//异常出现在这里 } }
异常出现在RegisterMimeFilter或RegisterNameSpace上。 -
- 已标记为答案 CaillenModerator 2014年1月6日 1:49