|
I try to launch an crystal report with CrystalCtrl , and succeed in this way :
#include "CrystalCtrl.h"
void CMainFrame::OnHelpLaunchreport()
{
try
{
GetSystemMenu(FALSE)->EnableMenuItem(SC_CLOSE,MF_GRAYED);
m_CrystalCtrl.SetReportFileName("autocolant.rpt");
CString sTitle = m_CrystalCtrl.GetReportFileName();
m_CrystalCtrl.SetWindowTitle(sTitle);
m_CrystalCtrl.SetWindowShowExportBtn(FALSE);
m_CrystalCtrl.SetWindowShowPrintSetupBtn(TRUE);
m_CrystalCtrl.SetWindowState(2);
m_CrystalCtrl.SetAction(TRUE);
GetSystemMenu(FALSE)->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND);
}
catch(CException* pException)
{
pException->ReportError();
pException->Delete();
}
}
My questions is : if something bad is happening during try section , programs stop without any warning .... How can I catch exception ?
|
|
|
|
|
When is talk about Crystal Report , is silence , avoid by everybody ...
|
|
|
|
|
mesajflaviu wrote: When is talk about Crystal Report , is silence...
Perhaps that's an indication that few, if any, use it.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
I don't mean something bad , is just an ... thought ... if I upset on somebody , forgive me ! You are always very kind , so I don't want to harm anybody !
|
|
|
|
|
I doubt anyone's upset. I was just allaying your concern about not getting a response. There can be a multitude of reasons why folks do not answer questions.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
I want to know how a read/write calls is accomplished in linux?
I mean how a function say read() will read the data from a file.
What all will be the steps from user mode read() function call to kernel mode?
Will anybody explain the steps or let me know any site from where I can get this info?
|
|
|
|
|
1) I suggest you post in the linux forum.
2) Since this is all open source stuff, I suggest you have a look at the stdio library source code.
|
|
|
|
|
Thanks for the information.
|
|
|
|
|
Hi,
All modern operating systems in protected mode [^]work nearly the same when executing privileged instructions. They all pass through a call gate[^] and allow the kernel to do the system call[^]. The modern system call instructions are SYSENTER/SYSEXIT. In the old days it was interrupt 0x2e in Windows and 0x80 in Linux.
Here is an example of a Win32 function which is written with both 0x2e and SYSENTER syntax.
http://www.codeproject.com/Messages/2468550/Re-Send-Key-Input.aspx[^]
To answer your question I would summarize as follows:
1.) Glibc simply pushes your arguments onto the stack and invokes the sysenter instruction. (An older version of Linux will invoke interrupt 0x80)
2.) When the CPU sees the SYSENTER instruction it will JMP to the address listed in the registered SYSCALL table. It will execute the instructions there. (Here is where permissions and actual I/O is performed)
Best Wishes,
-David Delaune
|
|
|
|
|
5 from me, thanks!
|
|
|
|
|
Great reply.
That clears it all.
Also find a good description of query at:
http://www.ibm.com/developerworks/linux/library/l-system-calls/
This reply is very much similar to the explaination for windows of read/write() as explained in the chapter IO systems of book Microsoft Windows Internals by Mark E. Russinovich and David A. Solomon
|
|
|
|
|
Hi,
I am reposting same question again becuase I am not getting sathisfied answer.
I have a DLL which is having pure functions and virtual functions. Now what to do with that to define the virtual function in my own class?
How to use dll?
How to define virtual function?
Any example?
|
|
|
|
|
As I said before, there's nothing special in using abstract classes coming inside a DLL.
I have done a little test:
#ifdef CPPDLL_EXPORTS
#define CPPDLL_API __declspec(dllexport)
#else
#define CPPDLL_API __declspec(dllimport)
#endif
class CPPDLL_API CCppDll
{
public:
CCppDll(void);
virtual int foo();
virtual int goo(int x)=0;
};
#include "stdafx.h"
#include "..\\..\\CppDll\\CppDll\\CppDll.h"
#include <iostream>
using namespace std;
class MyDer: public CCppDll
{
public:
int goo(int x){ return x*x;}
};
int _tmain(int argc, _TCHAR* argv[])
{
MyDer m;
cout << m.foo() << " " << m.goo(5) << endl;
return 0;
}
I compiles and works fine.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Thanks Pallini,
Let me check ...
|
|
|
|
|
If I design simple dll having exported function, it works fine.
But when I put same function code in class and put the name in "Additional Dependency". I am getting fatel error:
fatal error LNK1107: invalid or corrupt file: cannot read at 0x2B0
I written below code for exported function
EXPORTS
sum @1
But to write for class.....confused...
Please dont mind If I am asking silly question...
|
|
|
|
|
john5632 wrote: EXPORTS
sum @1
You must NOT do that for the class (you must NOT prevent name decoration). Just use the EXPORT macros (i.e. the CPPDLL_API in my example) Visual Studio provides for you.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
I am getting the fatal error. I tell what I did:
I am able to create dll file with class.
1. Added .h file in my project
2. Make "Add Dependecy" for dll file in linker settings.
When I try to run, compiler says "invalid or corrupt file: cannot read at 0x2B0"
Code for dll (.h):
--------------------------------------------------------------------
#ifdef CPPDLL_EXPORTS
#define CPPDLL_API __declspec(dllexport)
#else
#define CPPDLL_API __declspec(dllimport)
#endif
// This class is exported from the CppDll.dll
class CPPDLL_API CCppDll
{
public:
CCppDll(void);
int sum(int a,int b);
//virtual int goo(int x)=0;
};
dll code for (.cpp)
----------------------------------------------------------
#include "stdafx.h"
#include "samdll.h"
int CCppDll::sum(int x , int y)
{
return x+y;
}
Am I correct?
|
|
|
|
|
Well, you have to add the .lib file in the linker settings...
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
1. But I need to use only .h and .dll file then why .lib file is needed.
2. After adding lib file instaed of dll file, I am getting the error:
error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall CCppDll::CCppDll(void)" (__imp_??0CCppDll@@QAE@XZ) referenced in function "public: __thiscall MyDer::MyDer(void)" (??0MyDer@@QAE@XZ)
|
|
|
|
|
You have declared a constructor in the header file but have not added its implementation in the code file.
It's time for a new signature.
|
|
|
|
|
john5632 wrote: 1. But I need to use only .h and .dll file then why .lib file is needed.
Unless you link explicitely with the DLL (i.e. using LoadLibrary) you have to use the (generated: you have it) .lib file.
john5632 wrote: 2. After adding lib file instaed of dll file, I am getting the error:
error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall CCppDll::CCppDll(void)" (__imp_??0CCppDll@@QAE@XZ) referenced in function "public: __thiscall MyDer::MyDer(void)" (??0MyDer@@QAE@XZ)
The compiler (the linker, actually) is right, of course, you didn't provide the class constructor implementation.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
Hi Pallini,
I am able to do that...
But I need to do with dll and .h file.....
|
|
|
|
|
I suggest you start by reading some tutorials about dll, it seems you are missing some really important concepts here.
When you want to load a dll, you have two options, either you load it explicitely by calling LoadLibrary and GetProcAddress or you load it implicitely (which is in general easier) and in which case you need to have a lib file to link with. This lib is in fact an import library which is used to load the dll.
|
|
|
|
|
Thanks for reply...I used LoadLibrary and GetProcAddress to call the exported function but how to use with the class?
I dont know..please guide...
|
|
|
|
|
You can't use LoadLibrary and GetProcAddress to call a method from a class.
Your only option would be to call a function which instantiate the class and returns it, but it doesn't make a lot of sense. And what does it have to do with virtual function anyway ?
I really think you need to read more about C++ basics like classes. It seems you are missing some important concepts here and it's almost impossible to help you.
|
|
|
|