【发布时间】:2016-03-15 17:44:25
【问题描述】:
我正在使用 Code::Blocks 用 C 语言编写一个 DLL,我打算在 Winbatch 脚本中使用它,但目前我正在使用 Excel VBA 对其进行测试。 VBA 脚本运行 DLL getVersion() 函数的那一刻,Excel 崩溃。在网上搜索了几天:我没有找到合适的解决方案。
C代码是这样的
#define MQTTPUB_VERSION "V3.1.1Test"
DLL_EXPORT BSTR __stdcall WINAPI getVersion(void)
{
return MQTTPUB_VERSION ;
}
VBA代码是这样的
Public Declare Function mqttPubMsg Lib "mqttPubMsg.dll" _
(ByVal MQTT_ADDRESS As String, ByVal MQTT_CLIENTID As String, ByVal MQTT_TOPIC As String, ByVal MQTT_PAYLOAD As String) As Long
Public Declare Function getVersion Lib "mqttPubMsg.dll" () As String
Sub Test_DDL_mqttPubMsg()
'
' to test mqttPubMsg.DLL used in Visual Basic (VBA)
'
Dim DLLVersion As String * 35
Dim WorkDir As String
DLLVersion = Space(35)
WorkDir = ThisWorkbook.Path
ChDir WorkDir
If Dir(WorkDir & "\mqttPubMsg.dll", vbDirectory) = vbNullString Then
MsgBox "DLL not found"
Else
On Error GoTo DLLError
DLLVersion = getVersion() 'Excel crashes on executing this statement
End If
MsgBox ("Version DDL: " & DLLVersion)
Exit Sub
DLLError:
MsgBox ("DDL error")
End Sub
调用 DLL 的 C 程序和 getVersion() 函数工作正常。
此运行时错误的原因可能是什么以及如何解决它。
提前致谢。
【问题讨论】: