首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在MSAdminBase中使用.NET COM对象?

如何在MSAdminBase中使用.NET COM对象?
EN

Stack Overflow用户
提问于 2011-07-14 08:30:58
回答 1查看 545关注 0票数 1

此对象是在%windir%\system32\ADMWPROX.DLL中实现的-请参阅HKEY_CLASSES_ROOT\CLSID\{70B51430-B6CA-11D0-B9B9-00A0C922E750}

它在C代码中是完全可用的,但是我希望用一个.NET代码来代替它,而且对于tlbimp来说,ADMWPROX.DLL并不是一个有效的类型库:

代码语言:javascript
运行
复制
z:\Work>tlbimp c:\Windows\system32\admwprox.dll
Microsoft (R) .NET Framework Type Library to Assembly Converter 4.0.30319.1
Copyright (C) Microsoft Corporation.  All rights reserved.

TlbImp : error TI1002 : The input file 'c:\Windows\system32\admwprox.dll' is not a valid type library.

z:\Work>

当然,在Visual中添加COM引用时,COM对象列表中缺少它。

PS:我正在尝试设置IIS://localhost/W3SVC/1!SslCertHash属性,这篇文章解释说,唯一的方法是通过MSAdminBase对象,而不是MSAdminObject (由于模式定义中的一个bug )。后者被.NET System.DirectoryServices.DirectoryEntry方便地包装,但前者不是--因此是我的痛苦。

EN

回答 1

Stack Overflow用户

发布于 2011-07-18 04:24:21

好吧,我就是这样做的:

  1. 将IMSAdminBase_W接口定义转换为IDL。接口是在Microsoft的iadmw.h中声明的。它包含注释中的所有IDL属性,因此转换很容易。当然,IDL也需要声明coclass和库。
  2. 然后我用midl编译了IDL文件。
  3. 接下来,我对生成的tlb文件运行tlbimp。
  4. 最后,必须修复生成的互操作dll,特别是TlbImp将结构归因于StructLayout.Pack = 4,如果.NET作为64位运行,这将使我们失败-参见从编译为inetinfo.exe的.NET应用程序通过IMSAdminBase传递字节数组到AnyCPU时,.NET内部的访问冲突。我用Reflector.NET来解压缩它。实际上,我只是将反编译的互操作源代码作为我项目的一部分。

就这样。

我没有创建互操作源代码作为第一步,也是唯一的一步,因为IMSAdminBase_W接口相当大,所以我更喜欢将它转换为IDL,这就更容易了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6690455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档