Я использую Code :: Blocks для записи DLL в C, который я намерен использовать в сценарии Winbatch, но на данный момент я ' m тестируя его с помощью Excel VBA. В момент, когда скрипт VBA запускает функцию getVersion() библиотеки DLL, Excel аварийно завершает работу. Поиск в Интернете в течение нескольких дней: я не нашел правильного решения.Сценарий Excel VBA сбой при вызове функции DDL, написанной на C, которая возвращает строку BSTR
: 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 и функция GetVersion() работает нормально.
Что может быть причиной этой ошибки времени выполнения и как ее решить.
Заранее спасибо.
Большое спасибо за ваш совет, я попробую его, а также жду некоторые другие советы. – JanWillemT