Я пытаюсь использовать вызов в библиотеке, которая запрашивает массив символов, и я не уверен, как я могу обеспечить это через VBA.
Каждый вызов, который я пытаюсь сделать, вызывает Превосходно до sh фантастически без сообщений об ошибках или обратной связи.
Вот документация, на которую я смотрю (с измененным именем функции):
FunctionABC( unsigned short nCount,
char *ServiceName,
unsigned short Starting,
char *Point[],
unsigned short nPoint,
double Value[],
char *Time[],
unsigned short nTime,
char *Status[],
unsigned short nStatus,
char *Desc[],
unsigned short nDesc,
char *Units[],
unsigned short nUnits
);
Возвращаемым значением является целое число, в котором возвращается ненулевое число, если вызов не удался .
Вот код, который я написал в Excel ...
Public Declare PtrSafe Function FunctionABC Lib "SOMEAPI.dll" (ByVal nCount As Integer, _
ByVal ServiceName As String, ByVal nStarting As Integer, Point() As String, _
nPoint As Integer, value() As Double, Time() As String, nTime As Integer, _
Status() As String, nStatus As Integer, Desc() As String, nDesc As Integer, Units() As String, _
nUnits As Integer) As Integer
Sub test()
Dim nCount As Integer
Dim ServiceName As String
Dim nStarting As Integer
nCount = 1
ServiceName = "DMS.UNIV5"
nStarting = 0
Dim Point(1) As String
Dim nPoint As Integer
Dim value(1) As Double
Dim Time(1) As String
Dim nTime As Integer
Dim Status(1) As String
Dim nStatus As Integer
Dim Desc(1) As String
Dim nDesc As Integer
Dim Units(1) As String
Dim nUnits As Integer
Dim retval As Integer
retval = FunctionABC(nCount, ServiceName, nStarting, Point, nPoint, value, Time, nTime, Status, nStatus, Desc, nDesc, Units, nUnits)
End Sub
Таким образом, попытка запустить этот код в VBA останавливает интерфейс и вызывает перезапуск Excel. Я не получаю никакой обратной связи или сообщения об ошибке, поэтому трудно сказать, в чем проблема, но я действительно не уверен, как передать массив без символов по ссылке из VBA в эту DLL, как запрашивает документация, и ищет ок. не дал каких-либо четких результатов.
Я пробовал много вариантов этого вызова, добавляя и удаляя символы, используя различные типы данных, такие как ListObject
, пытаясь динамически изменить размер, и все такое, но не повезло, все Я передаю в действие, что Excel взорвался сам по себе.
В какой-то момент объявление объявленных массивов без размера привело к тому, что в Excel возникла ошибка sh, когда я пытался просто «просмотреть» код. В итоге мне пришлось отключить макросы и go в Visual Studio, чтобы указать размер массива, чтобы предотвратить сбои.
Самое неприятное во всем этом - отсутствие сообщения об ошибке или журнала для отладки, поэтому на данный момент я просто слепо гадаю, что происходит.