【问题标题】:Passing Integer parameter from Vb6 to C++ dll将整数参数从 Vb6 传递到 C++ dll
【发布时间】:2013-11-27 08:51:43
【问题描述】:
Public Declare Function getTable Lib "LuxDll.dll" (ByVal table As Integer, _
     ByVal col As Integer) As String

BSTR _stdcall getTable(int table, int col)

Dim i
i=5
debug.print getTable(i, 1)

以上工作

但如果我执行“Dim i as integer”,它会崩溃

VB中的参数应该不是整数吗?

谢谢

编辑:我应该指定 C++ 端崩溃及其因为整数值作为 -65000ish 传递

【问题讨论】:

  • 哈哈,我应该在询问之前尝试过这个.. 这很有效:D 谢谢.. 也感谢您的编辑(我总是对格式进行修改,哈哈)。我是否应该将 byval 表更改为整数,将 col 作为整数更改为 long?它似乎可以将它们作为整数使用,但我不明白为什么

标签: c++ vb6


【解决方案1】:

在将 VB6 与 C/++ 混合时,C int 等同于 VB6 中的 Long:所以 Dim i As Long 应该可以工作。这在 .NET 中不再适用。虽然你没看错,但它应该是 BYVAL(另一个常见错误)

【讨论】:

    【解决方案2】:

    当我做这样的事情时,我会尝试对我的类型非常明确。 Int 从实现到实现、平台到平台的变化。

    在任何地方都使用signed long 或VB 中的等效类型Int32,而不是int 或整数。这将为您省去很多痛苦。

    出于文档目的,还需要明确说明您的类型。我在尝试从文档工作不佳的供应商那里获取 DLL 时遇到了很多问题。像说 Int64 或 unsigned short 这样简单的事情将大大有助于告知尝试与您的 DLL 接口的人如何处理它。

    【讨论】:

      猜你喜欢
      • 2011-09-02
      • 2013-05-14
      • 2019-04-29
      • 1970-01-01
      • 2021-01-29
      • 2011-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多