Re: dlls on nt

From: Valery Fine (fine@bnl.gov)
Date: Fri Aug 28 1998 - 02:55:42 MEST


  Dear Chris
On 27 Aug 98 at 19:03, you wrote:

>  I was wondering if there exists a listing of all the functions
>  and
> their names that are contained in the root dlls included in the root
> release. 

  Yes, just print the list of the library you are asking about.
  (Root_Base.dll for your case). Under Windows one may apply the 
  DUMPBIN utility with /EXPORTS option.

                   DUMPBIN /EXPORTS Root_Base.lib

> I am trying to call root i/o functions from another
> program, and i am getting back my error for inability to find the
> function.  i can tell it is loading the dll and linking to it, but
> it can't find the name of the function.  I'm not sure if i am doing
> it right, so here is the basic code (C++)
> 

  The code you supplied is "C" not "C++".

> root is the name of the dll, and i believe that i just can't get the
> address for the Write function.  (if it exists, gosh, i could be
> linking to the wrong dll) i am linking to Root_Base.dll
> 

  Why you don't want just to call what you want. If you have 
object let's say "obj" to call its "Write" method you should "say"

     obj->Write();

  The C++ run-time system will make the rest job for you.

  DLL is created by compiler /linker. At this time there is no 
object. The object is created by the user code at Run-time.

  Since there is no object - there is no address for its Write method 
too within any DLL. So one can not find in DLL that address because 
it is NOT there at all.

  Well you may say I want to find not method of some object but 
the definition of the member-function "Write" for class "B" for 
example. Sometimes is might make sense. But this way you should be 
able to say "give me method "Write" of class "B". Just "Write" is not 
enough since DLL may contain many "Write()". Even a single class may 
have ANY number of the different "Write's". This means even telling
"member-function Write() of Class "B" is not enough to define what 
you want. You must say WHICH "Write" of class "B" you do need.

 Now let's assume you have managed out everything and found the 
address of that member-function. What can you do with that pointer ?
  To call some method via that pointer one still must supply the 
pointer to the OBJECT as the first argument of that "Write" function.

  At this point I would advice you to read some C++ documentation 
about how the library entry names of the class method are generated.

  If you are curious you may see these names via "dumpbin" utility of 
Microsoft SDK (under UNIX you may apply "nm" to get the same result)


> if (root != NULL)
>  {
>   write_pointer = (LPFNDLLFUNC1)GetProcAddress(root,"Write");
>   if (!write_pointer)   
>   {
>    // handle the error
>    FreeLibrary(root);       
>    return 2;   
>   } 
>   else
>   { 
>    // call the function
> 
>    uReturnVal = write_pointer(from_java);
>    return 1;
>    FreeLibrary(root);
>   }
>  }
> 
> any ideas would really be appreciated. 

  Yes, please, read the "Online help" Microsoft supplies. It is 
provided with very powerful search engine.  If you could not find 
the answer with "on-line docs" you may regard to use the Microsoft 
"knowledge base" too:

                   http://www.microsoft.com/kb

  If you have question related to very ROOT DLLs and ROOT 
classes send you question/bug reports/advices to 

                   mailto:rootdev@root.cern.ch. 

If you think your question is a general for ROOT community interest 
you may ask assistance from the 

                   mailto:roottalk@root.cern.ch 

E-mail list too.

  Hope this helps,
                  With my regards,
                                   Valery
> 
> 
>       chris
> chris garcia
> cdf group, the ohio state university
> 
=================================================================
Dr. Valeri Faine (Fine)
    -------------------          Phone: +1 516 344 7806
Brookhaven National Laboratory   FAX  : +1 516 344 4206
Bldg. 510A /STAR                 mailto:fine@bnl.gov
Upton, New York, 11973-5000      http://nicewww.cern.ch/~fine
USA
                                 
Dr. Valery Fine                  Telex : 911621 dubna su
    -----------
LCTA/Joint Inst.for Nuclear Res. Phone : +7 09621 6 40 80
141980 Dubna, Moscow region      Fax   : +7 09621 6 51 45
Russia                           mailto:fine@main1.jinr.dubna.su                              



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:37 MET