Solved

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

Posted on 2014-10-27
2
705 Views
Last Modified: 2014-10-28
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).
0
Comment
Question by:e_livesay
2 Comments
 
LVL 44

Accepted Solution

by:
AndyAinscow earned 500 total points
ID: 40408060
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
 

Author Comment

by:e_livesay
ID: 40409392
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

Featured Post

Active Directory Webinar

We all know we need to protect and secure our privileges, but where to start? Join Experts Exchange and ManageEngine on Tuesday, April 11, 2017 10:00 AM PDT to learn how to track and secure privileged users in Active Directory.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article will guide you to convert a grid from a picture into Excel format using Microsoft OneNote and no other 3rd party application.
This article descibes how to create a connection between Excel and SAP and how to move data from Excel to SAP or the other way around.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.
This Micro Tutorial will demonstrate how to use a scrolling table in Microsoft Excel using the INDEX function.

820 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question