(потерять класс и пространство имен).
аюсь использовать возможности Excel VBA для доступа и использования функций из файлов DLL.
пример:
Private Declare Function funcName Lib _
"<filePath\File.dll>" _
(ByRef a As Double, ByRef b As Double) As Double
Следуя инструкциям отУчебник Миркософт о том, как создать файл DLL, приводит к 3 предупреждениям (C4273), когда я пытаюсь построить проект, для 3 объявленных функций:
'MathLibrary::Functions::Add': inconsistent dll linkage,
'MathLibrary::Functions::Multiply': inconsistent dll linkage,
'MathLibrary::Functions::AddMultiply': inconsistent dll linkage
Когда VBA в Excel пытается получить доступ к созданному файлу .dll из этого учебника, он выдает ошибку времени выполнения (453): 'Не удается найти точку входа DLL Добавить в "путь \ file.dll".
Я новичок, когда дело доходит до языка C \ C ++. Я провел более 6 часов:
пытаясь сделать твик в учебнике ванилиначать сначалапоиск помощи и аналогичные вопросывносить изменения в заявления в рамках VBAИ все же я чувствую себя дальше от решения.
Я использую 32-битный Excel в 64-битной Windows.
Любая помощь приветствуется :)
редактировать
Файлы кодов (по запросу):
MathLibrary.cpp
// MathLibrary.cpp : Defines the exported functions for the DLL application.
// Compile by using: cl /EHsc /DMATHLIBRARY_EXPORTS /LD MathLibrary.cpp
#include "stdafx.h"
#include "MathLibrary.h"
namespace MathLibrary
{
double Functions::Add(double a, double b)
{
return a + b;
}
double Functions::Multiply(double a, double b)
{
return a * b;
}
double Functions::AddMultiply(double a, double b)
{
return a + (a * b);
}
}
MathLibrary.h
// MathLibrary.h - Contains declaration of Function class
#pragma once
#ifdef MATHLIBRARY_EXPORTS
#define MATHLIBRARY_API __declspec(dllexport)
#else
#define MATHLIBRARY_API __declspec(dllimport)
#endif
namespace MathLibrary
{
// This class is exported from the MathLibrary.dll
class Functions
{
public:
// Returns a + b
static MATHLIBRARY_API double Add(double a, double b);
// Returns a * b
static MATHLIBRARY_API double Multiply(double a, double b);
// Returns a + (a * b)
static MATHLIBRARY_API double AddMultiply(double a, double b);
};
}
stdafx.h
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
// TODO: reference additional headers your program requires here
targetver.h
#pragma once
// Including SDKDDKVer.h defines the highest available Windows platform.
// If you wish to build your application for a previous Windows platform,
// include WinSDKVer.h and
// set the _WIN32_WINNT macro to the platform you wish to support
// before including SDKDDKVer.h.
#include <SDKDDKVer.h>
Модуль VBA
Private Declare Function Add Lib _
"c:\<Path>\MathLibrary.dll" _
(ByRef a As Double, ByRef b As Double) As Double
Sub useAddXL()
MsgBox Add(1, 2)
End Sub