This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Please Help!! Calling Socket function in a dll file (that is created using cygwin library), by a Microsoft Visual C++ program resulting in infinite loop


I am trying hard to get this stuff working!!!!!! Could you please help me.

I created a dll file (test.dll), which contains the function that
creates a socket and return the success/failure status. This file uses
the socket.h provided by cygwin. I compiled this dll using gcc on
cygwin.

I also created a library file(testdll.lib) from this dll(test.dll).
When I tried to call the function defined in the test.dll in a program
(written in Microsoft Visual C++), this enters (that is created using
cygwin library), by a Microsoft Visual C++ program rean infinite loop.
The same program works fine if I call getuid or random function
instead of socket. And the stack is as below. I would really
appreciate if I can get some suggestions on how to get this working.


Call Stack (from my MSVC++ program):


	ntdll.dll!7c90eb94() 	
	ntdll.dll!7c90ea53() 	
	kernel32.dll!7c832998() 	
	cygwin1.dll!61058235() 	
	cygwin1.dll!61092daf() 	
	new3.exe!main()  Line 6 + 0x8	C++
	new3.exe!mainCRTStartup()  Line 259 + 0x19	C
	kernel32.dll!7c816fd7() 	
	ntdll.dll!7c915b4f() 	

test.cpp (uses the socket.h from cygwin and compiled using gcc)

#include<stdio.h>
#include<socket.h>
#define SOCKETTEST_BUILD_DLL

#include "test.h"


DLL_IMPORT_EXPORT int createSocket() { int s; s= socket(PF_INET, SOCK_DGRAM,17 ); return s; }

test.h

#ifdef SOCKETTEST_BUILD_DLL
#define DLL_IMPORT_EXPORT __declspec(dllexport)
#else
#define DLL_IMPORT_EXPORT __declspec(dllimport)
#endif
extern "C" {
DLL_IMPORT_EXPORT int createSocket();
}



My MSVC++ program calling this dll:

#include<stdio.h>
#include "test.h"
#include<Windows.h>

void main(){
	int s=createSocket();
	
		printf("the value returned is %d", s);
		Sleep(5000);
	
}


The command I used to create the dll file in cygwin:


gcc -shared -I ../../cygwin/usr/include/cygwin -o testdll.dll test.cpp
-Wl,--output-def,testdll.def,--out-implib,libtestdll.a


Command used to create the library file:


"C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\lib"
/machine:i386 /DEF:testdll.def

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]