EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  <20042005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  <20042005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: RE: explicit dynamic linking and ca.dll . CA bug?
From: "Jeff Hill" <[email protected]>
To: "'Liyu, Andrei'" <[email protected]>, <[email protected]>
Date: Mon, 27 Sep 2004 13:42:36 -0600
Liyu,

I am confused about why you appear to have labView explicitly linking with
ca.dll. It seems that a person would write a special shim dll for
interfacing labView with CA and have labview explicitly link with *that*
dll's interface instead of with ca.dll's interface? The shim DLL would then
implicitly link with ca.dll. That should be an easier approach. I assume
that this has already been done by other folks?

In any case, my very wild guess is that your troubles might occur because
the DLL's "thunk" (a code stub that transfers control to the function) is
used rather than the address of the function. This may be because
"dllimport" was used in shareLib.h.

Jeff


> -----Original Message-----
> From: Liyu, Andrei [mailto:[email protected]]
> Sent: Monday, September 27, 2004 11:59 AM
> To: [email protected]
> Subject: explicit dynamic linking and ca.dll . CA bug?
> 
> Hi,
> 
> 	Some months ago I wrote Jeff that I still have problem with
> LabView's library to CA client. When LabView program finishes to work
> with CA (=calls ca_context_destroy() ) I see that LabView crashed. When
> I start from Visual C++ debug I see message
> "First-chance exception in LabView.exe (NTDLL.DLL): 0xC0000005: Access
> Violation."
> 	In that case it was difficult to catch bug. It could be in
> LabView, in library, in Epics CA. Moreover, other simple tests work
> fine.
> 	Some days ago I noticed difference between LabView call and
> simple test programs. My simple test programs call ca.dll in "Implicit
> dynamic linking". LabView calls any dll in "Explicit dynamic linking".
> 
> 	I wrote the simplest program
> ============================
> #include <windows.h>
> #include "cadef.h"
> 
> HINSTANCE hLibrary;
> 
> char * AcPVName = "DTL_Diag:ND334:FaLoss1";
> chid chidChannelToPV;
> 
> typedef int ( __stdcall * iFca_context_create)( enum);
> iFca_context_create piFca_context_create;
> 
> //epicsShareFunc int epicsShareAPI ca_create_channel( const char
> *pChanName,
> //		caCh *pConnStateCallback, void *pUserPrivate, capri
> priority, chid *pChanID);
> typedef int ( __stdcall * iFca_create_channel)( const char *, caCh *,
> void *, capri, chid *);
> iFca_create_channel piFca_create_channel;
> 
> //epicsShareFunc int epicsShareAPI ca_pend_io( ca_real timeOut);
> typedef int ( __stdcall * iFca_pend_io)( ca_real timeOut);
> iFca_pend_io piFca_pend_io;
> 
> //epicsShareFunc int epicsShareAPI ca_clear_channel( chid chanId);
> typedef int ( __stdcall * iFca_clear_channel)( chid chanId);
> iFca_clear_channel piFca_clear_channel;
> 
> typedef int ( __stdcall * iFca_context_destroy)( void);
> iFca_context_destroy piFca_context_destroy;
> 
> typedef int ( __stdcall * iFca_context_destroy)( void);
> iFca_context_destroy piFca_context_destroy;
> 
> int main(){
> 	long lStatus;
> 	hLibrary = LoadLibrary("C:\\Epics\\bin\\win32-x86\\ca.dll");
> 
> 	piFca_context_create = ( iFca_context_create) GetProcAddress(
> hLibrary, "_ca_context_create@4");
> 	if( piFca_context_create != NULL)
> 		lStatus = ( ( piFca_context_create)(
> ca_enable_preemptive_callback));
> 
> //	piFca_create_channel = ( iFca_create_channel) GetProcAddress(
> hLibrary, "_ca_create_channel@20");
> //	if( piFca_create_channel != NULL)
> //		lStatus = ( ( piFca_create_channel)( AcPVName, 0, 0, 0,
> &chidChannelToPV));
> 
> //	piFca_pend_io = ( iFca_pend_io) GetProcAddress( hLibrary,
> "_ca_pend_io@8");
> //	if( piFca_pend_io != NULL)
> //		lStatus = ( ( piFca_pend_io)( 10));
> 
> //	piFca_clear_channel = ( iFca_clear_channel) GetProcAddress(
> hLibrary, "_ca_pend_io@4");
> //	if( piFca_clear_channel != NULL)
> //		lStatus = ( ( piFca_clear_channel)( chidChannelToPV));
> 
> 
> 	piFca_context_destroy = ( iFca_context_destroy) GetProcAddress(
> hLibrary, "_ca_context_destroy@0");
> 	if( piFca_context_destroy != NULL)
> 		lStatus = ( ( piFca_context_destroy)());
> 
> 	lStatus = FreeLibrary( hLibrary);
>  	return 1;
> }
> =====================
> 
> 
> 
> This is output from the program. It has
> First-chance exception in EpicsToLabViewTest.exe (NTDLL.DLL):
> 0xC0000005: Access Violation.
> 
> =================
> Loaded 'ntdll.dll', no matching symbolic information found.
> Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic
> information found.
> Loaded symbols for 'C:\Epics\bin\win32-x86\ca.dll'
> Loaded symbols for 'C:\Epics\bin\win32-x86\Com.dll'
> Loaded 'C:\WINDOWS\system32\ws2_32.dll', no matching symbolic
> information found.
> Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic
> information found.
> Loaded 'C:\WINDOWS\system32\ws2help.dll', no matching symbolic
> information found.
> Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic
> information found.
> Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic
> information found.
> Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic
> information found.
> Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information
> found.
> Loaded symbols for 'C:\WINDOWS\system32\MSVCRTD.DLL'
> Loaded symbols for 'C:\WINDOWS\system32\MSVCP60D.DLL'
> Loaded 'C:\WINDOWS\system32\mswsock.dll', no matching symbolic
> information found.
> Loaded 'C:\WINDOWS\system32\wshtcpip.dll', no matching symbolic
> information found.
> Loaded 'C:\WINDOWS\system32\dnsapi.dll', no matching symbolic
> information found.
> Loaded 'C:\WINDOWS\system32\winrnr.dll', no matching symbolic
> information found.
> Loaded 'C:\WINDOWS\system32\wldap32.dll', no matching symbolic
> information found.
> Loaded 'C:\WINDOWS\system32\secur32.dll', no matching symbolic
> information found.
> The thread 0xA30 has exited with code 1 (0x1).
> First-chance exception in EpicsToLabViewTest.exe (NTDLL.DLL):
> 0xC0000005: Access Violation.
> The thread 0xF34 has exited with code 1 (0x1).
> The thread 0xA0C has exited with code 1 (0x1).
> The thread 0x930 has exited with code 1 (0x1).
> The thread 0xFD8 has exited with code 1 (0x1).
> The program
> 'C:\EpicsClients\EpicsToLabViewTest\Debug\EpicsToLabViewTest.exe' has
> exited with code 1 (0x1).
> =================
> 
> Couple moments.
> 1. I use Epics 3.14.4. Visual C++ 6.0. Of course, Window XP.
> 2. Epics dll are compiled with __stdcall. I couldn't call Epics function
> until
> 	- adding __stdcall to each "typedef int ( __stdcall *
> iFca_context_create)( enum);"
> 	- changing function name to name in real dll like
> ca_context_create to _ca_context_create@4. For example,
> 	piFca_context_create = ( iFca_context_create) GetProcAddress(
> hLibrary, "_ca_context_create@4");
> 	Maybe anybody know how it can be used in normal way?
> 
> Thanks, Andrei.


References:
explicit dynamic linking and ca.dll . CA bug? Liyu, Andrei

Navigate by Date:
Prev: RE: IOC and channels Jeff Hill
Next: RE: explicit dynamic linking and ca.dll . CA bug? Liyu, Andrei
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  <20042005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: explicit dynamic linking and ca.dll . CA bug? Liyu, Andrei
Next: RE: explicit dynamic linking and ca.dll . CA bug? Liyu, Andrei
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  <20042005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 10 Aug 2010 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·