从 MS 访问调用 dll 函数
Posted
技术标签:
【中文标题】从 MS 访问调用 dll 函数【英文标题】:calling a dll function from MS access 【发布时间】: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);
【问题讨论】:
显然Long
和 unsigned long
不是匹配类型。尝试仅使用 long
而不使用 unsigned
。
@πάνταῥεῖ 这些类型匹配得很好。由于 VBA 没有无符号类型,因此您无法做得更好。我不认为DLL可以更改。所以参数类型是正确的。
【参考方案1】:
您的 DLL 中的函数未指定调用约定。因此假设它使用默认值__cdecl
。这意味着它不能从 VBA 访问。您能够调用它的唯一方法是创建一个适配器 DLL,该 DLL 导出一个 __stdcall
函数供 VBA 调用。然后适配器 DLL 可以将调用转发给原始的 __cdecl
函数。
【讨论】:
以上是关于从 MS 访问调用 dll 函数的主要内容,如果未能解决你的问题,请参考以下文章
从 Delphi“访问冲突”正确调用 DLL 中的 C++ 函数