尽管声明保持相同,但没有二进制兼容性

时间:2015-05-21 13:01:24

标签: com vb6 binary-compatibility

我一直在尝试生成具有二进制兼容性的新版COM DLL。我不明白为什么我收到这条消息:

'init' in the 'Logger' class module has arguments and/or a return type that is incompatible with a similar declaration in the version-compatible component.

Original definition:
 Function init(aLOGDIR As String, Optional aListBox As Object, Optional aMAXLISTBOXLINES As Integer) As Boolean

Current definition:
 Function init(aLOGDIR As String, Optional aListBox As Object, Optional aMAXLISTBOXLINES As Integer) As Boolean

我没有改变init,你可以看到......

这是我的步骤:

  • 没有兼容性的第一代
  • 在项目属性中设置二进制兼容性(引用以前生成的dll,无论是否重命名)
  • 第二代
  • 发生警告。

这是因为参数是Object吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

根据我的经验,当试图让VB6使用COM或C ++时,必须注意数据类型的差异。我猜这可能是你的问题。如果你已经熟悉这个,我道歉:

aLOGDIR As String表示char**;考虑更改为ByVal aLOGDIR As String,但我怀疑这与您的问题相关。

Optional aMAXLISTBOXLINES As Integer表示short而不是int。可能会出现某些填充问题,但只需将其更改为As Long即可,并解决问题。

As Boolean表示系统上有short而不是bool。使用As Long可能更安全。