【发布时间】: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