【问题标题】:Preventing COM Name Mangling防止 COM 名称修改
【发布时间】:2011-07-11 07:06:22
【问题描述】:

我正在尝试为 c#.net 中的另一个 VB6 引用的 VB6 dll 编写替换。

目前我们只能处理后者,我在这方面取得了一些成功。除非我遇到了问题。

我的枚举正在被修改,导致它被称为“A1BACSTrans_BACSAU”而不是预期的“BACSAU”

遗留代码将(显然)不再编译。

这可以预防吗?如果是这样,如何?我听说过修改 IDL,但我看不到他们对损坏名称的引用,只是未损坏...

提前谢谢你!

【问题讨论】:

  • 那你在看哪个 IDL?
  • .class public auto ansi seal TestA1Replacement.BCStrategy extends [mscorlib]System.Enum { .custom instance void [mscorlib]System.Runtime.InteropServices.ComVisibleAttribute::.ctor(bool) = ( 01 00 01 00 00 ) .field public specialname rtspecialname int32 value__ .field public static literal valuetype TestA1Replacement.BCStrategy BCStratAV = int32(0x00000000) ........ more....... } // 类 TestA1Replacement 结束。 BCStrategy 我在上面看不到名称篡改的证据。
  • @Mattias 好的。我认为那是“il”而不是“idl”,因此没有达到我的预期。我已经从使用 OLE/COM 对象查看器中听到了这一点。枚举 { BCStrategy_BCStratAV = 0, BCStrategy_BCStratFull = 1, BCStrategy_BCStratInfo = 2, BCStrategy_BCStratNone = 3 } BCStrategy;但是,当我保存并尝试使用 Midl 创建一个 tbl 时,我收到大量错误:错误 MIDL2088:[uuid] 格式不正确真的没有办法在代码级别说不破坏这些名称吗?!
  • 伙计们,我也在 c-sharpcorner 讨论过这个问题,虽然我主要是自己找到了解决方案,但我已经在那里记录了它。 c-sharpcorner.com/Forums/Thread/111642/…

标签: c# com vb6 interop legacy-code


【解决方案1】:

伙计们,我也在 c-sharpcorner 讨论过这个问题,虽然我主要是自己找到了解决方案,但我已经在那里记录了它

http://www.c-sharpcorner.com/Forums/Thread/111642/preventing-com-name-mangling.aspx

基本上改变 IDL 是我发现的方法。

我很想知道是否有办法在代码中做到这一点,也许是一个属性,但如果有办法我不知道!

【讨论】:

    猜你喜欢
    • 2018-08-04
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 2011-11-19
    相关资源
    最近更新 更多