From: Luke D. <cod...@ho...> - 2003-02-17 01:41:54
|
>From: blu_line <std...@ya...> >To: min...@li... >Subject: [Mingw-users] LoadLibrary / GetProcAddress / calling functions >Help needed >Date: Sun, 16 Feb 2003 18:49:40 +0000 (GMT) > >Hello all, > >I am new to MingW and possibly i will ask questions >asked may time before. >I did quite some embedded SW for PIC's and DSP's but >not for PC's. > >The project i am currently working on makes use of a >USB chip from FTDI. They supplied me with a DLL which >i am trying to call. > >I am able to laod it with with LoadLibrary and i am >able to find the correct function. > >A funcion in teh DLL is > >ftstatus = FT_Open(int IDevice, FT_Handle &ftHandle) > >ftstatus = error code >IDevice = number of devices to call >fthandle is pointer to each device > >Just to play around i did this : > > hello_t hello = (hello_t) GetProcAddress(h, >"FT_Open"); Did you check that 'hello' is not NULL? > >Where in i defined : > > typedef unsigned long (*hello_t)(int >iDevice,unsigned long *ftHandle); > >And hoped it would work so i could call it with : > >ftstatus=hello(0, &ftHandle); > >Well it does not ! Firstly, in what way does it "not work"? (I assume it crashes). Is this the exact declaration specified in the DLL's documentation, or does it mention stdcall? If it uses the stdcall calling convention then you should do: typedef unsigned long (__declspec(stdcall) *hello_t)(int iDevice,unsigned long *ftHandle); > >Can some one help me out also by explaining what that >weird structure of > >typedef void (*hello_t)(); > >or what i did is ! I'm not sure what you are asking here. > > >Best regards, > >Simon Luke _________________________________________________________________ Hotmail now available on Australian mobile phones. Go to http://ninemsn.com.au/mobilecentral/hotmail_mobile.asp |
From: John B. <joh...@ho...> - 2003-02-18 01:55:49
|
>>Can some one help me out also by explaining what that >>weird structure of >> >>typedef void (*hello_t)(); >> >>or what i did is ! > >I'm not sure what you are asking here. > Your original definition was: typedef unsigned long (*hello_t)(int iDevice,unsigned long *ftHandle); What you are doing here is creating a function pointer type for a function with the following prototype: unsigned long MyFunction(int iDevice, unsigned long *ftHandle); I don't completely understand all aspects of the syntax, but I know how to use it. 1)It follows the usual typedef rules, e.g., int x; //definition of int variable named x typedef int x; // definition of int type named x so putting hello_t where the function name was, declares a function pointer type with the name hello_t. 2) You have to put *hello_t. typedef unsigned long (hello_t)(int iDevice,unsigned long *ftHandle); will compile, and you will be able to define hello_t h; but h = GetProcAddress(...) will fail because h is not an lvalue. I don't know what h would be in this case. 3) The *hello_t has to be in parentheses, because of precedence rules, I believe. typedef unsigned long * hello_t(int iDevice,unsigned long *ftHandle); will compile, but the * goes with the unsigned long, i.e., hello_t is a function that returns an unsigned long *. _________________________________________________________________ Help STOP SPAM with the new MSN 8 and get 2 months FREE* http://join.msn.com/?page=features/junkmail |