Problem with release build accessing a dll

Posted on 2003-11-18
Last Modified: 2010-04-02
I have added a public-domain fast numerical solver to my computational fluid dynamics code.  The solver is written in C and seems to me (as someone who went straight to C++ and therefore doesn't know much about these things) as a bit strange in places.  I thought the best approach for me would be to compile the code as a dll, with a single function declared as __declspec( dllexport) to provide the input/output to the solver.

I compiled a release version of the dll and added appropriate code to my C++ project (using LoadLibrary & GetProcAddress) to access the function.  It all works fine for a debug build of my project, but when I compile a release version of my project, the dll is called correctly but seems to corrupt the array that contains the solution.  It is mysteriously shifted to the next array in the argument list.

I'm assuming that there is some memory corruption problem, but does anyone have any ideas what it could be?

The function declaration is:

__declspec( dllexport ) int fastlap(int *plhsSize,int *prhsSize,int *pnumSing,double *px,int *pshape,int *pdtype,int *plhsType,int *prhsType,int *plhsIndex,int *prhsIndex,double *plhsVect,double *prhsVect,double *pxf,double *pxnrm,int *pnumLev,int *pnumMom,int *pmaxItr,double *ptol,int *pjob);

The solution should be returned in the plhsVect array, but for a release version it is returned in the prhsVect array.

Just to stress again – in each instance I am using the release build of the dll.

I am using Visual C++ 6.0 on Windows 2000.

Thanks for your help.

Question by:NeilCfd
  • 2
  • 2
LVL 86

Accepted Solution

jkr earned 250 total points
ID: 9772642
Have you tried to turn off the optimizations?

Author Comment

ID: 9772712
Thanks jkr - that must be the easiest 250 points you've ever earned!

Do you know why the optimisation (optimised for speed in my case) makes this happen?  I thought speed optimisation would be appropriate for my code as the runtime is pretty serious (>24 hours in a lot of cases) but I must admit I haven't done any testing to see what difference it was making.

Thanks again,

LVL 86

Expert Comment

ID: 9772776
>>Do you know why the optimisation (optimised for speed in my case) makes this happen?

Actually, to see what is going wrong, you'd have to disassemble and compare both the optimized and the non-optimized version. Optimizers are known for being less-than-perfect, and when I saw the lengthy parameter list, I was afraid that the compiler would try to optimize that one in the 1st place, especially after your remark that said "It is mysteriously shifted to the next array in the argument list"

Author Comment

ID: 9772828
Yes - that makes sense.  Thanks!


Featured Post

NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
why "." vs "->" 23 120
C++ to C# code conversion issue 4 106
c++ getting the first 10 characters of a char* string 11 94
Problem with SqlConnection 4 169
Article by: SunnyDark
This article's goal is to present you with an easy to use XML wrapper for C++ and also present some interesting techniques that you might use with MS C++. The reason I built this class is to ease the pain of using XML files with C++, since there is…
Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…

773 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