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 Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Date: Wed, 13 Jul 2005 08:35:52 -0700 (PDT) Message-Id: <200507131535.j6DFZqwi005679@diometes.ucdavis.edu> To: cygwin AT cygwin DOT com Subject: How to create a .dll which contains a function defined in another program? From: "Yu-Cheng Chou" X-Errors-To: cycchou AT magenta DOT ucdavis DOT edu X-User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322) X-IsSubscribed: yes Hi, bar() is in the main.c which is compiled using VC++. bar() is called inside module.c which is compiled as module.dll using cygwin's gcc. module.dll is loaded by LoadLibrary() in main.exe. /* main.c */ #include #include extern "C" int mainCRTStartup(); extern "C" int __stdcall cygloadCRTStartup() { char padding[4096]; return mainCRTStartup(); } __declspec(dllexport) int bar() { printf("bar() is called\n"); return 0; } int main() { char *modname = "module.dll"; HMODULE h; HMODULE handle; void (*init)(); int (*fp)(int); int ret; h = LoadLibrary("cygwin1.dll"); init = (void (*)())GetProcAddress(h, "cygwin_dll_init"); init(); handle = LoadLibrary(modname); fp = (int (*)(int))GetProcAddress(handle, "foo"); ret = fp(125); printf("ret = %d\n", ret); return 0; } /* module.c */ #include extern __declspec(dllimport) int bar(); __declspec(dllexport) int foo(int arg){ printf("foo() is called in main.exe\n"); printf("arg * 2 = %d\n", arg * 2); printf("\n"); bar(); return arg * 2; } Thanks -- 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/