A problem about call Dll

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • ÓÚÑó

    A problem about call Dll

    Hi all!
    I have a Dll like this:

    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>

    __declspec (dllexport) int Add (int n)
    {
    int x;

    x = 100 + n;

    return x;
    }

    And I use this to call the Dll:

    #include "windows.h"
    #include "stdio.h"

    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int iCmdShow)
    {
    HINSTANCE hAdd;
    FARPROC Add;

    if(hAdd= LoadLibrary ("Add.dll"))
    {
    Add = GetProcAddress (hAdd, "Add");
    printf ("%i\n", Add(100));
    FreeLibrary (hAdd);
    }

    }

    After compiling,there is an error:too many arguments to function.

    Please tell me how can i correct my code. Thanks in advance!!


  • Willem

    #2
    Re: A problem about call Dll

    ÓÚÑó wrote:
    ) Hi all!
    ) I have a Dll like this:
    )
    ) #include <windows.h>
    <snip>
    ) Please tell me how can i correct my code. Thanks in advance!!

    You'll have better luck asking in a newsgroup that deals with
    windows programming, such as comp.os.ms-windows.program mer.*


    SaSW, Willem
    --
    Disclaimer: I am in no way responsible for any of the statements
    made in the above text. For all I know I might be
    drugged or something..
    No I'm not paranoid. You all think I'm paranoid, don't you !
    #EOT

    Comment

    • jacob navia

      #3
      Re: A problem about call Dll

      ÓÚÑó wrote:
      Hi all!
      I have a Dll like this:
      >
      #include <windows.h>
      #include <stdio.h>
      #include <stdlib.h>
      >
      __declspec (dllexport) int Add (int n)
      {
      int x;
      >
      x = 100 + n;
      >
      return x;
      }
      >
      And I use this to call the Dll:
      >
      #include "windows.h"
      #include "stdio.h"
      >
      int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
      LPSTR lpCmdLine, int iCmdShow)
      {
      HINSTANCE hAdd;
      FARPROC Add;
      >
      if(hAdd= LoadLibrary ("Add.dll"))
      {
      Add = GetProcAddress (hAdd, "Add");
      printf ("%i\n", Add(100));
      FreeLibrary (hAdd);
      }
      >
      }
      >
      After compiling,there is an error:too many arguments to function.
      >
      Please tell me how can i correct my code. Thanks in advance!!
      >
      >
      Using the free compiler lcc-win I do not get any errors. I do
      get warnings about using FARPROC without a cast, and missing return
      value from WinMain, but there are no errors.

      Which compiler are you using?

      Using Microsoft C, I do not get any warning or errors at all.


      --
      jacob navia
      jacob at jacob point remcomp point fr
      logiciels/informatique

      Comment

      • Bartc

        #4
        Re: A problem about call Dll

        "ÓÚÑó" <yuyang@bjzh.co m.cnwrote in message
        news:g8j967$rq9 $1@news.cn99.co m...
        #include "windows.h"
        #include "stdio.h"
        >
        int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
        LPSTR lpCmdLine, int iCmdShow)
        {
        HINSTANCE hAdd;
        FARPROC Add;
        >
        if(hAdd= LoadLibrary ("Add.dll"))
        {
        Add = GetProcAddress (hAdd, "Add");
        printf ("%i\n", Add(100));
        FreeLibrary (hAdd);
        }
        >
        }
        >
        After compiling,there is an error:too many arguments to function.
        Which function, Add?

        I don't recognise the FARPROC and other types, but: you're calling Add()
        with an int parameter, yet you've declared Add to have no parameters
        (assuming FARPROC declares a function of some kind).

        Also you may want to check that Add actually contains a valid function
        address.

        --
        Bartc

        Comment

        • jacob navia

          #5
          Re: A problem about call Dll

          Bartc wrote:
          I don't recognise the FARPROC and other types, but: you're calling Add()
          with an int parameter, yet you've declared Add to have no parameters
          (assuming FARPROC declares a function of some kind).
          >
          Also you may want to check that Add actually contains a valid function
          address.
          >
          Normally FARPROC is
          typedef int (CALLBACK *FARPROC)();

          where CALLBACK is just _stdcall.

          Now, in C, this is a prototype to a function pointer with
          an unknown number of parameters.

          In C++ however, the empty parameter list is just assumed
          (void), and that could explain the warning...


          --
          jacob navia
          jacob at jacob point remcomp point fr
          logiciels/informatique

          Comment

          • Martin Ambuhl

            #6
            Re: A problem about call Dll

            "ï¿½ï¿½ï¿½ï¿½ï¿ ½ï¿½ï¿½ï¿½ï¿½ï¿ ½ï¿½ï¿½ï¿½ï¿½ï¿ ½ï¿½ï¿½ï¿½ï¿½ï¿ ½ï¿½ï¿½ï¿½ï¿½ï¿ ½ï¿½" wrote:
            Hi all!
            I have a Dll like this:
            Then you probably have an implementation problem, not a C problem. For
            those you need to ask in an implementation-specific newsgroup. You are
            lucky, since there a several specifically for windows programming.
            DLLs, in particular, are implementation details that have nothing at all
            to do with C.

            #include <windows.h>
            ^^^^^^^^^^^
            Note that <windows,his no part of the C language. It is, however,
            part of the the Windows interface to that particular operating system.
            #include <stdio.h>
            #include <stdlib.h>
            __declspec (dllexport) int Add (int n)
            ^^^^^^^^^^ ^^^^^^^^^
            And neither __declspec nor dllexport mean anything at all in C. They
            may be defined in the <windows.hheade r, but we can;t see them.
            {
            int x;
            x = 100 + n;
            return x;
            }
            The body of this function could be collapsed down to
            { return 100 + n; }
            The variable x serves no purpose at all.

            And I use this to call the Dll:
            #include "windows.h"
            ^^^^^^^^^^
            #include "stdio.h"
            ^^^^^^^
            Unless you have your own personal copies of <windows.hand <stdio.h>
            that differ from the implementation-provided ones, and you mean to use
            those instead of the implementation-provided headers, the "..." form is
            almost always wrong.
            >
            int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
            LPSTR lpCmdLine, int iCmdShow)
            And look at all the things in that one line that have no meaning in C
            without provided definitions, which you have not shown us. Those
            include WINAPI, WinMain, HINSTANCE, and LPSTR. Note that all C programs
            have a main() function in a hosted environment. You do not have one,
            but are using WinMain(). You are using a C-like language designed for
            use only in one particular environment. Newsgroups for that environment
            abound.
            {
            HINSTANCE hAdd;
            FARPROC Add;
            FARPROC doesn't mean anything either.
            >
            if(hAdd= LoadLibrary ("Add.dll"))
            {
            Add = GetProcAddress (hAdd, "Add");
            printf ("%i\n", Add(100));
            FreeLibrary (hAdd);
            }
            >
            }
            >
            After compiling,there is an error:too many arguments to function.
            When you ask this in the right place, be sure to tell them the actual
            error message. You seem to have at least the functions LoadLibrary,
            GetProcAddess, printf, and FreeLibrary, only one of those, printf, has a
            defined meaning in C. You need to determine _which_ function has too
            many arguments. You should then look up those functions in your
            documentation. The only defined C function does not have the wrong
            number of arguments, so it must be one of those implementation-provided
            functions, so look in your implementation documentation. No C reference
            can help you.

            Comment

            • Bartc

              #7
              Re: A problem about call Dll


              "Martin Ambuhl" <mambuhl@earthl ink.netwrote in message
              news:g8jfhv$h7t $1@registered.m otzarella.org.. .
              "ï¿½ï¿½ï¿½ï¿½ï¿ ½ï¿½ï¿½ï¿½ï¿½ï¿ ½ï¿½ï¿½ï¿½ï¿½ï¿ ½ï¿½ï¿½ï¿½ï¿½ï¿ ½ï¿½ï¿½ï¿½ï¿½ï¿ ½ï¿½" wrote:
              >{
              > int x;
              > x = 100 + n;
              > return x;
              >}
              >
              The body of this function could be collapsed down to
              { return 100 + n; }
              The variable x serves no purpose at all.
              For that matter, the function serves little purpose either; just adding 100
              to the argument would be better.

              And the entire program can be further collapsed into:

              #include <stdio.h>
              int main(void) {
              puts("200");
              }

              Which also eliminates the OP's problem :-)

              --
              Bartc

              Comment

              Working...