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

标签 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 ?谢谢你的帮助。

    最佳答案

    根据我的经验,当试图让 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 可能更安全.

    关于com - 尽管声明保持相同,但没有二进制兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30374580/

    相关文章:

    c# - 在 C# 中使用 ref 数组参数与 COM 互操作

    winapi - VB6 在使用事件 Windows 消息 Hook 进行调试时退出

    vb6 - VB6 IDE 是否可以在 Windows 7/8/10 64 位上运行?

    c++ - 虚拟析构函数导致访问冲突

    Java 二进制兼容性问题 : sun. font.FontManager 类成为接口(interface)

    c++ - 添加静态变量会破坏 Linux 上的二进制兼容性吗?

    .net - pInvoke 和 COM Interop 之间有什么区别?

    c++ - CoCreateInstance 返回 E_NOINTERFACE 即使找到接口(interface)

    c++ - 获取指向 IUpdate2 接口(interface)的指针

    vb6 - Crystal Reports 8.5 vb6 并发许可证问题