Author |
Message
|
hunterKillerz |
Posted: Wed Jun 30, 2010 11:50 pm Post subject: Message Exit in C, amqsxrma.c |
|
|
 Apprentice
Joined: 16 Jun 2010 Posts: 40
|
Do anyone here know how to include amqsxrm.def into C?
is it Project->Setting-> move to Link tab. Under Object/Library modules, add 'amqsxrm.def' ??
I wanna compile the amqsxrma.c and see what's going on, so that i can further modify it. (to manually configure default output path on that msgexit -- reference message). |
|
Back to top |
|
 |
gbaddeley |
Posted: Thu Jul 01, 2010 3:37 pm Post subject: |
|
|
 Jedi Knight
Joined: 25 Mar 2003 Posts: 2538 Location: Melbourne, Australia
|
A .def file contains info for the MS command line linker, eg.
link /out:myprog.exe /def:myprog.def myprog.obj user32.lib kernel32.lib _________________ Glenn |
|
Back to top |
|
 |
gbaddeley |
Posted: Thu Jul 01, 2010 3:48 pm Post subject: |
|
|
 Jedi Knight
Joined: 25 Mar 2003 Posts: 2538 Location: Melbourne, Australia
|
Code: |
LIBRARY AMQSXRM
EXPORTS
MsgExit |
This defines the library name and the exported entry point.
AFAIK, this def file is not actually required on Windows, if the source code contains :
Code: |
__declspec( dllexport ) extern
void MQENTRY MsgExit
(PMQCXP pExitParms
,PMQCD pChannelDef
,PMQLONG pDataLength
,PMQLONG pAgentBufferLength
,PMQCHAR pAgentBuffer
,PMQLONG pExitBufferLength
,PMQCHAR *pExitBuffer
); |
HTH. _________________ Glenn |
|
Back to top |
|
 |
hunterKillerz |
Posted: Thu Jul 01, 2010 5:29 pm Post subject: |
|
|
 Apprentice
Joined: 16 Jun 2010 Posts: 40
|
Thanks for the reply gbaddeley..
Erm, to compile that sample code(amqsxrma.c) provided by IBM, I have added in the library link: mqm.lib and mqmvx.lib by project--> Setting--> Link--> lib module.
then i add its related file(amqsxrm.def) into that project by add file to project --> select amqsxrm.def --> added.
But i got this error when i Build:
Code: |
[size=18]Linking...
Creating library Debug/amqsxrma.lib and object Debug/amqsxrma.exp
amqsxrma.exp : warning LNK4070: /OUT:AMQSXRM.exe directive in .EXP differs from output filename "Debug/amqsxrma.exe"; ignoring directive
Debug/amqsxrma.exe : warning LNK4086: entrypoint "_mainCRTStartup" is not __stdcall with 12 bytes of arguments; image may not run
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/amqsxrma.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
amqsxrma.exe - 2 error(s), 2 warning(s)[/size]
|
I asked the C expert in my company and research on how to create .dll from .def...seems we have to add in additional code like : _stdcall,
gbaddeley, can you teach me more? I saw there are 2 part of 'this' on amqsxrma.c:
Code: |
void MQENTRY MsgExit
(PMQCXP pExitParms
,PMQCD pChannelDef
,PMQLONG pDataLength
,PMQLONG pAgentBufferLength
,PMQCHAR pAgentBuffer
,PMQLONG pExitBufferLength
,PMQCHAR *pExitBuffer
)
|
so, do i need to add "__declspec( dllexport ) extern" or "_stdcall" on both part of this MsgExit function?
I've tried add "__declspec( dllexport ) extern" or "_stdcall" on both function, does't work..  |
|
Back to top |
|
 |
mqjeff |
Posted: Thu Jul 01, 2010 7:16 pm Post subject: |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
You're generally going about this the wrong way.
You are attempting to use the visual tool to avoid learning how to compile C programs.
You should instead go back to the MQ documentation, find the *very* *very* specific instructions on how to compile MQ programs from the command line, and then work backwards from that to configuring the visual tool.
You should also consider the implications of the phrase "The September that never ended". |
|
Back to top |
|
 |
hunterKillerz |
Posted: Thu Jul 01, 2010 7:29 pm Post subject: |
|
|
 Apprentice
Joined: 16 Jun 2010 Posts: 40
|
mqjeff wrote: |
You're generally going about this the wrong way.
You are attempting to use the visual tool to avoid learning how to compile C programs.
You should instead go back to the MQ documentation, find the *very* *very* specific instructions on how to compile MQ programs from the command line, and then work backwards from that to configuring the visual tool.
You should also consider the implications of the phrase "The September that never ended". |
Yes sir, in fact I have tried to compile through command line too
Code: |
cl amqsxrma.c -o amqsxrm.dll -LD -DEFAULTLIB mqm.lib mqmvx.lib amqsxrm.def
|
but it gives me an error of:
Code: |
amqsxrma_cluster.c(214) : fatal error C1083: Cannot open include file: 'cmqc.h':
No such file or directory |
 |
|
Back to top |
|
 |
fjb_saper |
Posted: Thu Jul 01, 2010 8:27 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
hunterKillerz wrote: |
amqsxrma_cluster.c(214) : fatal error C1083: Cannot open include file: 'cmqc.h':
No such file or directory |
Well obviously you are missing either a lib directive or/and a path directive.
Did you consult the manual on how to link / build an mq program even before attempting to build/link an mq exit?
As has been said often enough and once more here:
MQ Exits are an ADVANCED topic. Beginners beware and at your own risk!
Have fun  _________________ MQ & Broker admin |
|
Back to top |
|
 |
hunterKillerz |
Posted: Thu Jul 01, 2010 8:35 pm Post subject: |
|
|
 Apprentice
Joined: 16 Jun 2010 Posts: 40
|
Quote: |
Well obviously you are missing either a lib directive or/and a path directive. |
Yeah I knew that, I've tried to do this to include lib directive,
Code: |
#include <C:\Program Files\IBM\WebSphere MQ\tools\c\include\cmqc.h>
#include <C:\Program Files\IBM\WebSphere MQ\tools\c\include\cmqxc.h>
#include <C:\Program Files\IBM\WebSphere MQ\tools\c\include\amqsvmha.h>
|
And I even go to tools-->options-->directory-->include all the lib path.
but yet getting same outcome.
Quote: |
Did you consult the manual on how to link / build an mq program even before attempting to build/link an mq exit?
|
Yes, But i couldn't found any way of doing that. I thought w/o modifying the sample code, we can compile easily through d command line.
Isn't it? (although i did modified,which is adding dir path on #include, desperately to try other possibilities to sort things out.)
Have you ever compile amqsxrma.c before? |
|
Back to top |
|
 |
Vitor |
Posted: Fri Jul 02, 2010 4:41 am Post subject: |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
hunterKillerz wrote: |
Have you ever compile amqsxrma.c before? |
Not through this method no.
I must also echo the comments of my worthy associates. Exits are an advanced topic. You can "see what's going on" by looking at the code; if you put display statements in it or (shudder) try and use a debugging tool to "see what's going on" then you're going to end up with a contact admin mess in the bottom of your computer and a broken queue manager.
The compilation and linking requirements for exits are explicit and precise for reasons explained in the documentation. Don't just experiment with them or you'll break your set-up. A rule of thumb is that if you can't figure out how to properly compile and link an exit, you don't have enough C experience to use an exit. _________________ Honesty is the best policy.
Insanity is the best defence. |
|
Back to top |
|
 |
mqjeff |
Posted: Fri Jul 02, 2010 6:55 am Post subject: |
|
|
Grand Master
Joined: 25 Jun 2008 Posts: 17447
|
hunterKillerz wrote: |
Yes sir, in fact I have tried to compile through command line too
Code: |
cl amqsxrma.c -o amqsxrm.dll -LD -DEFAULTLIB mqm.lib mqmvx.lib amqsxrm.def
|
|
That doesn't match the documentation.
 |
|
Back to top |
|
 |
|