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

Com 尽管声明保持相同,但没有二进制兼容性,com,vb6,binary-compatibility,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

我一直在尝试生成具有二进制兼容性的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并重命名或不重命名)
  • 第二代
  • 出现警告

这是因为参数是
对象
?谢谢您的帮助。

在我的经验中,当试图让VB6与COM或C++一起工作时,必须注意数据类型的差异。我猜这可能是你的问题。如果您已经熟悉这一点,我深表歉意:

aLOGDIR作为字符串
表示一个
char**
;考虑更改为<代码> ByVal aLOGDIR作为字符串< /代码>,虽然我怀疑这与您的问题有关。

可选的aMAXLISTBOXLINES作为整数
表示
,而不是
int
。可能会出现某些填充问题,但只要将其更改为
,就可以解决该问题


作为布尔值
表示系统上的
而不是
bool
。只使用
可能更安全,只要

我不认为这是因为参数是一个对象,不。我在谷歌上搜索了一下,发现有一个老错误,当您在参数中引用表单对象时,它会给出这个消息。可能是因为ListBox控件,您遇到了相同的错误。虽然你把它当作一个物体。无论如何,解决方法是忽略消息。也许你可以继续保持兼容性并测试所有东西,看看它是否有效?谢谢你的回复,事实上,这是一个我忘记告诉它的表单对象。我会试着做一个反馈。