[mpich-discuss] problem of calling .dll in mpich

Vivian viviantj at gmail.com
Fri Dec 5 18:10:34 CST 2008


Hi,
      It runs fine with the "-localonly" and "-localroot" option.
      Really don't understand why it cannot call dll using "-n 1" option.
(This program should be run in multiple computers).
Regards,
Vivian

On Fri, Dec 5, 2008 at 6:01 PM, Jayesh Krishna <jayesh at mcs.anl.gov> wrote:

>  Hi,
>  Can you also try whether the program runs fine with the "-localroot"
> option ?
>
> Regards,
> Jayesh
>
>  ------------------------------
> *From:* Vivian [mailto:viviantj at gmail.com]
> *Sent:* Friday, December 05, 2008 11:30 AM
> *To:* Jayesh Krishna
> *Cc:* mpich-discuss at mcs.anl.gov
> *Subject:* Re: [mpich-discuss] problem of calling .dll in mpich
>
> Hi,
>       I attached the sample test program which fails to call dll when it is
> run by "mpiexec -n 1 application name".
>      (Btw, when using "mpiexec -localonly application name", dll can be
> called.)
>
> The DLL called in the program is a Dynamic Link Library (DLL) provided by
> ArcView ( a GIS software) for use with WinHelp that lets you run a script.
> The DLL contains two functions that you can use as WinHelp macros.
>
> AVRun -- this macro sends an Avenue statement from Help to ArcView. For
> example, you might send a statement to make a particular view the active
> document or run a script contained in the current project.
>
>  AVScript -- this macro runs a given script regardless of what ArcView
> project is open. The script, in this case, is stored as part of the Help
> file and not in an ArcView project.
>
>
> Here's how you could run a script in the current ArcView project file and
> pass an argument to it. In this case, the number 5 is passed as an argument
> to a script, named script1, in the project:
> AVRun(`av.Run("script1", 5)')
>
>
>       Here is the sample test code
>
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------
> #include<iostream>
> #include <windows.h>
>
> /*Some users may get error messages such as
>         SEEK_SET is #defined but must not be for the C++ binding of MPI
>    The problem is that both stdio.h and the MPI C++ interface use SEEK_SET,
> SEEK_CUR, and SEEK_END.
>    This is really a bug in the MPI-2 standard. You can try adding the
> following three lines before mpi.h is included
> */
> #undef SEEK_SET
> #undef SEEK_END
> #undef SEEK_CUR
> #include "mpi.h"
>
> typedef char (__stdcall *AVRUN) (char[100]);
> HINSTANCE ArcviewDLL;
> AVRUN AVRun;
>
> int main(int argc,char **argv)
> {
>
>     //load avhelp.dll
>     ArcviewDLL= LoadLibraryA("Avhelp.dll");    //It needs a Unicode string.
> Therefore, we use LoadLibraryA() instead of LoadLibrary()
>     if (ArcviewDLL==NULL)
>     {
>         printf("cannot load the Avhelp.dll.\n");
>         printf("Make sure that the Avhelp.dll is in your \\windows\\system
> "
>                "directory or in the program's directory.\n");
>     }
>
>     //get the adress of the AVRun function
>     AVRun = (AVRUN) GetProcAddress(ArcviewDLL, "AVRun");
>
>     //================================== Start MPI
> =======================================//
>     //MPI : Declar Variables
>     int my_rank;                                // Rank of process
>     int num_proc;                                // Number of processers
>
>     //MPI : Initialize
>     MPI_Init(&argc, &argv);
>     MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
>     MPI_Comm_size(MPI_COMM_WORLD, &num_proc);
>
>
>     // -------- master Program ----------------//
>     if (my_rank==0)     // Master processor
>     {
>         //-------------Start call dll --------------//
>         ArcviewDLL= LoadLibraryA("Avhelp.dll");
>         AVRun = (AVRUN) GetProcAddress(ArcviewDLL, "AVRun");
>         std::cout<<"Start Calling DLL"<<std::endl;
>         AVRun("av.run(\"HAO_script3\",\"\")");
>         std::cout<<"End Calling DLL"<<std::endl;
>
>         //MasterWork_MPI();
>         //-------------End call dll---------------//
>     }
>
>     // --------slave Program ------------------//
>     else
>     {
>         //SlaveWork_MPI();
>     }
>
>     MPI_Finalize();
>
>     //================================ End MPI
> ====================================//
>     return 0;
> }
>
>
> Vivian
> 12/05/2008
>
>
>
> On Fri, Dec 5, 2008 at 10:03 AM, Jayesh Krishna <jayesh at mcs.anl.gov>wrote:
>
>>  Hi,
>>  Can you send us a sample test program that fails ?
>>
>> Regards,
>> Jayesh
>>
>>  ------------------------------
>> *From:* mpich-discuss-bounces at mcs.anl.gov [mailto:
>> mpich-discuss-bounces at mcs.anl.gov] *On Behalf Of *Vivian
>> *Sent:* Friday, December 05, 2008 12:05 AM
>> *To:* mpich-discuss at mcs.anl.gov
>> *Subject:* [mpich-discuss] problem of calling .dll in mpich
>>
>>   Hi,
>>       I met some problems when I was trying to call a dll in a mpich
>> program (Language:VS 2005).
>>       (1) MPICH seems to only support calling convention  _cdecl.
>>           When I change the project setting to _stdcall, the code cannot
>> be successfully built.
>>           So I set the project setting back to _cdecl and force the
>> calling convention of the function pointer to my function on the DLL to be
>> "_stdcall". This time the program is built.
>>           Under debugging mode or directly run in command window (
>> c:>test.ext), there is no problem to call dll in the code.
>>           Here is the code:
>>
>> --------------------------------------------------------------------------------
>>
>>      typedef char (__stdcall *AVRUN) (char[100]);
>>      HINSTANCE ArcviewDLL;
>>      AVRUN AVRun;
>>      ArcviewDLL= LoadLibraryA("Avhelp.dll");
>>      AVRun = (AVRUN) GetProcAddress(ArcviewDLL, "AVRun");
>>
>>     AVRun("av.run(\"HAO_script3\",\"\")");
>>
>> -------------------------------------------------------------------------------
>>
>>       (2) However, the program fails to call dll when I use "mpiexec" to
>> run it. (c:>mpiexec -n 1 test.exe).
>>            It seems to "stop" right before this line
>>   -------------------------------------------------------------
>>     AVRun("av.run(\"HAO_script3\",\"\")");
>>   -------------------------------------------------------------
>>           Is there anyone having any idea why this happens?
>>
>> --
>> Vivian
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/mpich-discuss/attachments/20081205/d488559f/attachment.htm>


More information about the mpich-discuss mailing list