I am attempting to use Excel VBA's ability to access and use functions from DLL files.
example:
Private Declare Function funcName Lib _
"<filePath\File.dll>" _
(ByRef a As Double, ByRef b As Double) As Double
Following the instructions from Mircosoft's tutorial on how to create a DLL file, leads to 3 warnings (C4273) when I try to build the project, for the 3 functions declared:
'MathLibrary::Functions::Add': inconsistent dll linkage,
'MathLibrary::Functions::Multiply': inconsistent dll linkage,
'MathLibrary::Functions::AddMultiply': inconsistent dll linkage
When the VBA in Excel tries to access the created .dll file from this tutorial, it produces a runtime error (453): 'Can't find DLL entry point Add in "path\file.dll".
I am a novice when it comes to the C\C++ language. I have spent over 6 hours of:
- trying to make tweaks to the vanilla tutorial
- starting over
- googling for help, and similar issues
- making tweaks to the statements within VBA
And yet I feel further from a solution.
I am running 32-bit Excel on 64-bit Windows.
Any help would be much appreciated :)
Edit
Code Files (as requested):
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 Module
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
 
    

