[Last Call] Learn about multicloud storage options and how to improve your company's cloud strategy. Register Now

x
?
Solved

Problem with release build accessing a dll

Posted on 2003-11-18
4
Medium Priority
?
305 Views
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.

NeilCFD
0
Comment
Question by:NeilCfd
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
4 Comments
 
LVL 86

Accepted Solution

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

Author Comment

by:NeilCfd
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,

NeilCFD
0
 
LVL 86

Expert Comment

by:jkr
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"
0
 

Author Comment

by:NeilCfd
ID: 9772828
Yes - that makes sense.  Thanks!

NeilCFD
0

Featured Post

How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

Question has a verified solution.

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

In days of old, returning something by value from a function in C++ was necessarily avoided because it would, invariably, involve one or even two copies of the object being created and potentially costly calls to a copy-constructor and destructor. A…
This article will show you some of the more useful Standard Template Library (STL) algorithms through the use of working examples.  You will learn about how these algorithms fit into the STL architecture, how they work with STL containers, and why t…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

650 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