【问题标题】:calling a dll function from MS access从 MS 访问调用 dll 函数
【发布时间】:2014-02-02 18:42:48
【问题描述】:

您好,我正在尝试在 ms access vba 中调用此函数。它只是抛出了糟糕的调用约定。我试图重新编译访问但 zilch。我之前调用过 dll 函数,所以也许我错过了一些基本的东西,或者可能与 dll 文件有一些不兼容。提前感谢您的帮助。

我的 ms 访问代码

Private Declare Function StartComm Lib "C:\ComConcert.dll" ( _
    ByVal ulPort As Long, ByVal ulBaudRate As Long, ByVal ulByteSize As Long, _
    ByVal ulParity As Long, ByVal ulStopbits As Long, ByVal lncontrol As Long) _
    As Long

Dim OpnPort As Long
OpnPort = StartComm(3, 9600, 7, 0, 0, 0)

dll 文件的原始 c 代码。

DLLEXPORT unsigned long StartComm(unsigned long ulPort, unsigned long ulBaudRate, 
    unsigned long ulByteSize, unsigned long ulPartity, unsigned long ulStopBits,
    unsigned long ulFlowControl);

【问题讨论】:

  • 显然 Longunsigned long 不是匹配类型。尝试仅使用 long 而不使用 unsigned
  • @πάνταῥεῖ 这些类型匹配得很好。由于 VBA 没有无符号类型,因此您无法做得更好。我不认为DLL可以更改。所以参数类型是正确的。

标签: c++ c vba dll


【解决方案1】:

您的 DLL 中的函数未指定调用约定。因此假设它使用默认值__cdecl。这意味着它不能从 VBA 访问。您能够调用它的唯一方法是创建一个适配器 DLL,该 DLL 导出一个 __stdcall 函数供 VBA 调用。然后适配器 DLL 可以将调用转发给原始的 __cdecl 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多