Я импортирую функцию в 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 Integer
Sub use_dll()
Dim return_val As Integer
return_val = fnaddnum()
MsgBox ("Value is" & Str(return_var))
End Sub
Проблема в том, что у меня была опечатка. Я ссылался на "return_var" вместо "return_val". Действительно, ссылка на функцию dll возвращала значение правильно.
Option Explicit On