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
689 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

Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Vlookup for in-between dates 4 37
Basic Excel DataEntry for Dashboard analysis 3 24
Excel Formula 5 43
VLOOKUP 6 16
This article will guide you to convert a grid from a picture into Excel format using Microsoft OneNote and no other 3rd party application.
Some code to ensure data integrity when using macros within Excel. Also included code that helps secure your data within an Excel workbook.
Graphs within dashboards are meant to be dynamic, representing data from a period of time that will change each time the dashboard is updated with new data. Rather than update each graph to point to a different set within a static set of data, t…
This Micro Tutorial demonstrates in Microsoft Excel how to consolidate your marketing data by creating an interactive charts using form controls. This creates cool drop-downs for viewers of your chart to choose from.

786 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