Visual Studio 2010 — Использование DLL в ExcelVBA из переполнения стека

Я импортирую функцию в 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

0

Решение

Проблема в том, что у меня была опечатка. Я ссылался на «return_var» вместо «return_val». Действительно, ссылка на функцию dll возвращала значение правильно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector