Solved

Problem with release build accessing a dll

Posted on 2003-11-18
4
299 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
  • 2
  • 2
4 Comments
 
LVL 86

Accepted Solution

by:
jkr earned 250 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

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

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…
Container Orchestration platforms empower organizations to scale their apps at an exceptional rate. This is the reason numerous innovation-driven companies are moving apps to an appropriated datacenter wide platform that empowers them to scale at a …
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

809 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