[mpich-discuss] Problems using DLL
Jayesh Krishna
jayesh at mcs.anl.gov
Tue Apr 27 11:18:26 CDT 2010
Hi,
Try copying the library dll (TestDll.dll) to the directory containing your MPI application (D:\Euan\VisualStudio\Test_Parallel_Files\Debug) and let us know if it works for you.
(PS: I just tried compiling/running your code and it worked for me.)
Regards,
Jayesh
----- Original Message -----
From: "Euan Barlow" <euan.barlow at strath.ac.uk>
To: "Jayesh Krishna" <jayesh at mcs.anl.gov>, mpich-discuss at mcs.anl.gov
Sent: Tuesday, April 27, 2010 11:01:54 AM GMT -06:00 US/Canada Central
Subject: RE: [mpich-discuss] Problems using DLL
Hi Jayesh,
Thanks for your suggestion. I tried running it from the command line but it's still not producing any output. Once it's executed it just produces another command prompt.
I'm relatively new to this and I could be doing something stupid but I can't work out what. I would appreciate any more help you can give.
Cheers
Euan
________________________________________
From: Jayesh Krishna [jayesh at mcs.anl.gov]
Sent: 27 April 2010 15:23
To: mpich-discuss at mcs.anl.gov
Cc: Euan Barlow
Subject: Re: [mpich-discuss] Problems using DLL
Hi,
Can you try running your code from the command line without the "-noprompt" option and let us know the results (From the command line run, "C:\Program Files\MPICH2\bin\mpiexec.exe" -n 4 D:\Euan\VisualStudio\Test_Parallel_Files\Debug\Test_Parallel_Files.exe)?
Regards,
Jayesh
----- Original Message -----
From: "Euan Barlow" <euan.barlow at strath.ac.uk>
To: mpich-discuss at mcs.anl.gov
Sent: Friday, April 23, 2010 11:58:26 AM GMT -06:00 US/Canada Central
Subject: [mpich-discuss] Problems using DLL
Hello,
I am trying to link a DLL with some code which calls MPI functions and I am having difficulties. I have created a smaller test problem which also results in the same problem.
I am using MS Visual Studio 2008. My codes are written in C++. I have downloaded the latest version of MPICH2 from the website. I am using the MPIEXEC Wrapper to execute the .exe file.
The test DLL I am using is from the VS help files. I created an empty project and added a header file called TestDll.h and a source file called TestDll.cpp. They are as follows:
// TestDll.h
namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static __declspec(dllexport) double Add(double a, double b);
// Returns a - b
static __declspec(dllexport) double Subtract(double a, double b);
// Returns a * b
static __declspec(dllexport) double Multiply(double a, double b);
// Returns a / b
// Throws DivideByZeroException if b is 0
static __declspec(dllexport) double Divide(double a, double b);
};
}
and
// TestDll.cpp
#include "TestDll.h"
#include <stdexcept>
using namespace std;
namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{
return a + b;
}
double MyMathFuncs::Subtract(double a, double b)
{
return a - b;
}
double MyMathFuncs::Multiply(double a, double b)
{
return a * b;
}
double MyMathFuncs::Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}
return a / b;
}
}
Using the project properties I set the configuration type to .dll and built the solution. This created .dll and .lib files. I then created a seperate project to call this library and implement some MPI functions. The source code is given below:
#include <iostream>
#include "TestDll.h"
#include "mpi.h"
using namespace std;
int main(int argc, char *argv[])
{
int my_id, num_procs;
MPI::Init ( argc, argv );
my_id = MPI::COMM_WORLD.Get_rank ( );
num_procs = MPI::COMM_WORLD.Get_size ( );
cout << "Process " << my_id << " of " << num_procs << endl;
double a = 7.4;
int b = 99;
cout << "a + b = " <<
MathFuncs::MyMathFuncs::Add(a, b) << endl;
cout << "a - b = " <<
MathFuncs::MyMathFuncs::Subtract(a, b) << endl;
cout << "a * b = " <<
MathFuncs::MyMathFuncs::Multiply(a, b) << endl;
cout << "a / b = " <<
MathFuncs::MyMathFuncs::Divide(a, b) << endl;
MPI::Finalize ( );
return 0;
}
If I comment out the lines concerning MPI functions the project builds and debugs successfully and produces the expected output so I think I have linked the DLL correctly to this project. Similarly, if I comment out the rest of the lines, which use the DLL, the project builds successfully and is executed successfully from the MPIEXEC wrapper.
When I have the code as above, with no lines commented, the solution still builds successfully; however when I then try to use the MPIEXEC wrapper to execute the .exe file a command shell flashes up and disappears immediately, with no output produced. The command line in the Wrapper is
"C:\Program Files\MPICH2\bin\mpiexec.exe" -n 4 -noprompt D:\Euan\VisualStudio\Test_Parallel_Files\Debug\Test_Parallel_Files.exe
I would be very grateful if anyone can provide advice as to what I can do to solve this problem.
Regards
Euan
More information about the mpich-discuss
mailing list