How do I get Excel 2013 on Windows 7 to access C++ DLL functions that are successfully accessed by Excel 2010 on Windows XP.

I have written a C++ DLL using Microsoft Visual Studio 2010.  The DLL contains a function that takes as parameters 2 doubles and returns their product as a double.  Using Excel 2010 on Windows XP I am able to get access to this function using VBA but using Excel 2013 on Windows 7 I encounter an error.  I have added the PtrSafe keyword in the declaration of the function in Excel 2013 but this has not resolved the problem.

Here is the C++ routine in the DLL that is being tested:
double __stdcall SimpleMultiply(double x, double y)
{
      double result = x * y;

      return result;
}

Here is the *.def file in the C++ project which controls the names of the exported routines:
LIBRARY "Calculate"
EXPORTS
CalculateEXL = Calculate
TestSettingDoublesEXL = InitializeDoubles
SimplyMultiplyTestEXL = SimpleMultiply

It should be noted that all three of the routines (CalculateEXL, TestSettingDoublesEXL and SimplyMultiplyTestEXL) are listed when I run dumpbin /exports myDLL.dll from a Command Prompt.

Here is what my VBA code looks like in Excel 2010 on Windows XP:
Option Explicit

Private Declare Function SimplyMultiplyTestEXL Lib "C:\myProject\Debug\myDLL.dll" (ByVal x As Double, ByVal y As Double) As Double
Sub testTheDLL()

    Dim a As Double
    Dim b As Double
    Dim c As Double
   
    a = 6.1
    b = 2.5
   
    c = SimplyMultiplyTestEXL(a, b)

End Sub

Here is what my VBA code looks like in Excel 2013 on Windows 7 (same as above with the PtrSafe keyword added):
Option Explicit

Private Declare PtrSafe Function SimplyMultiplyTestEXL Lib "C:\myProject\Debug\myDLL.dll" (ByVal x As Double, ByVal y As Double) As Double
Sub testTheDLL()

    Dim a As Double
    Dim b As Double
    Dim c As Double
   
    a = 6.1
    b = 2.5
   
    c = SimplyMultiplyTestEXL(a, b)

End Sub

When I run the code in Excel 2010 in the VBA debugger (Windows XP), c = 15.25, as expected.  However, when I run the code in Excel 2013 in the VBA debugger (Windows 7) I get the error message:
Run-time error '48':
Error in loading DLL

Any thoughts on how to fix this?  I've been looking around to see if this is a 32-bit vs 64-bit issue but various things on the web imply that all I need to do is add the PtrSafe keyword to resolve this issue (described succinctly here: http://stackoverflow.com/questions/5506912/how-should-i-make-my-vba-code-compatible-with-64-bit-windows).
e_livesayAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

AndyAinscowFreelance programmer / ConsultantCommented:
I think it is (as you suspect) a 32/64 bit issue.  The XP is almost certainly 32 bit and the Win 7 is very likely to be 64 bit.  As the code originally runs on XP (32 bit) then it will be built as 32 bit.  The Excel 2013 on Win 7 however is very likely to be the 64 bit versions and you then run into trouble.

The simplest you can do is to recompile the dll as a 64 bit version.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
e_livesayAuthor Commented:
Converting my MSVS 2010 C++ DLL to be 64-bit solved this problem.  Here is a link to the instructions that I used to do this:
http://msdn.microsoft.com/en-us/library/9yb4317s.aspx
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft Excel

From novice to tech pro — start learning today.