Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Message-ID: <3C638FE5.5070508@syntrex.com> Date: Fri, 08 Feb 2002 09:44:21 +0100 From: Pavel Tsekov User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.4) Gecko/20011126 Netscape6/6.2.1 X-Accept-Language: en-us MIME-Version: 1.0 To: Kent Watsen CC: cygwin AT cygwin DOT com Subject: Re: dlopen(0, RTLD_LAZY) doesn't work? References: <3C61E3C1 DOT 9010200 AT watsen DOT net> <4 DOT 3 DOT 1 DOT 2 DOT 20020207094648 DOT 0210abf0 AT pop DOT ma DOT ultranet DOT com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Well, I think the problem is that you specify __declspec(dllexport) in the function declaration. If you do this then you're supposed to do extern __declspec(dllimport) void foo(void) in the source file which uses this function. If you want to use load library you have to remove the __declspec(dllexport) and replace it with an .def with EXPORTS section, then you list the exports in the .def file. just my 0.02 euro cents :P Larry Hall (RFK Partners, Inc) wrote: > I've never seen this attempted to access a function not in a DLL, though > in theory (at least), what you're doing should work. > > Check the symbols in the resulting object file. Make sure that the call > type is the same as you're referencing the function by. In other words, > make sure that you call the function by the name as the object file has > it (probably stdcall) rather than the name as you write it (cdecl). > Change your definition call type or the calling name itself so that the > call type matches. This might help. > > Larry Hall lhall AT rfk DOT com > RFK Partners, Inc. http://www.rfk.com > 838 Washington Street (508) 893-9779 - RFK Office > Holliston, MA 01746 (508) 893-9889 - FAX > > > > At 09:57 PM 2/6/2002, Kent Watsen wrote: > > >>OK, so I've written the windows equivalent of my original program >>and still get the same error - is there some linking option I'm missine? >> >>Here is the new code, again just compile (gcc foo.c) and run (foo.exe): >> >>#include >>#include >> >>extern __declspec(dllexport) void foo(void) >>{ >> printf("hello\n"); >>} >> >>int main(int argc, char *argv[]) >>{ >> void* dl = NULL; >> void* func = NULL; >> >> dl = (void *) GetModuleHandle (NULL); >> if (dl == NULL) { >> printf("GetModuleHandle() failed\n"); >> exit(0); >> } >> >> func = (void*)GetProcAddress((HMODULE)dl, "foo"); >> if (func == NULL) { >> printf("GetProcAddress() failed (code %u)\n", GetLastError()); >> exit(0); >> } >> >> printf("do something meaningful\n"); >> >> return 0; >>} >> >> >> >> >> >> >> >> >> >>Kent Watsen wrote: >> >> >>>Hi, >>> >>>I've read the mailing list archives and searched google trying >>>to figure out how to get the following program to work. All >>>you have to do is save it to a file (foo.c), compile (gcc foo.c), >>>and run - I always get "dlsym() failed." >>> >>>Note, I have tried many variations of extern and _declspec >>>as well as looking for "_foo" in addition to "foo" ("nm a.exe | >>>grep foo" returned "0040104c T _foo"... >>> >>>Here is the code - help would be greatly appreciated - thanks! >>> >>>#include >>>#include >>>#include >>> >>>extern __declspec(dllexport) void foo(void) >>>{ >>> printf("hello\n"); >>>} >>> >>>int main(int argc, char *argv[]) >>>{ >>> void* dl = NULL; >>> void* func = NULL; >>> >>> dl = dlopen(0 , RTLD_LAZY); >>> if (dl == NULL) { >>> printf("dlopen() failed\n"); >>> exit(0); >>> } >>> >>> func = dlsym(dl, "foo"); >>> if (func == NULL) { >>> printf("dlsym() failed\n"); >>> exit(0); >>> } >>> >>> printf("do something meaningful\n"); >>> >>> dlclose(dl); >>> return 0; >>>} >>> >>> >>> >>> >>>-- >>>Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple >>>Bug reporting: http://cygwin.com/bugs.html >>>Documentation: http://cygwin.com/docs.html >>>FAQ: http://cygwin.com/faq/ >>> >> >> >>-- >>Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple >>Bug reporting: http://cygwin.com/bugs.html >>Documentation: http://cygwin.com/docs.html >>FAQ: http://cygwin.com/faq/ >> > > > -- > Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple > Bug reporting: http://cygwin.com/bugs.html > Documentation: http://cygwin.com/docs.html > FAQ: http://cygwin.com/faq/ > > > > -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/