Я импортирую функцию в Excel VBA из DLL. DLL была создана в Microsoft Visual C ++ (в основном неизмененной версии примера по умолчанию). Возвращаемое значение вызова функции в VB неверно, но я не знаю причину этого.
Значение, которое я вижу, равно 0, но я ожидаю получить значение 42.
Я нашел почти идентичный вопрос Вот. Я попробовал их эксперимент, где я вызвал функцию из электронной таблицы. Я видел такое же поведение, возврат электронной таблицы был верным, а возврат в коде vba — нет.
Код C ++ выглядит так:
addnum.h
#ifdef ADDNUM_EXPORTS
#define ADDNUM_API __declspec(dllexport)
#else
#define ADDNUM_API __declspec(dllimport)
#endif
extern "C" {
ADDNUM_API int fnaddnum(void);
}
addnum.cpp
#include "stdafx.h"#include "addnum.h
ADDNUM_API int fnaddnum(void)
{
return 42;
}
Код VB выглядит так:
Declare Function fnaddnum _
Lib " ... path to dll ... " _
() As IntegerSub use_dll()
Dim return_val As Integer
return_val = fnaddnum()
MsgBox ("Value is" & Str(return_var))
End Sub
Проблема в том, что у меня была опечатка. Я ссылался на «return_var» вместо «return_val». Действительно, ссылка на функцию dll возвращала значение правильно.
Других решений пока нет …