![]() |
AW: In Asm-Prozedur eine Exception auslösen
no, with is only for results greater a Register aka SizeOf(Pointer)
or for Results with managed types, such as string and interface. |
AW: In Asm-Prozedur eine Exception auslösen
@kas ob:
ehmm... with self, I mean not the Delphi keyword in Context of Classes/Records. with self, I mean the internal working Design of Microsoft Windows. Like himitsu said - it could be for "self" managed Code (COM+). And I can bet, that Microsoft have a secret Layer'ed File with Numbers (I pointed: 2 ^64 = 18 Trillion GiBytes dataflow. So, each managed Type becomes a (GUID) Number, and as such, all the Component(s) are different and can directly accessed. Instead to use String like in Delphi, and C++ Builder Debug Symbols. In older Window's, the DLL Functions could be called by Value, and Name. |
AW: In Asm-Prozedur eine Exception auslösen
I don't understand what you mean, but the stack layout is documented here:
![]() |
AW: In Asm-Prozedur eine Exception auslösen
hello @jaenicke:
I point to: ![]() You can not simply call Exception Functions or any Functions of any Classes without .Create a Instance. This give MAVs. |
AW: In Asm-Prozedur eine Exception auslösen
Zitat:
Notice that, exception are raised by an interrupt instruction, meaning it have standard way to raise, this doesn't have anything to do the OS (Windows/Linux...) it is standard by hardware, were the OS Kernel should have installed its debugger to capture/receive these hardware generated interrupt. That was one, and second is notice how Delphi raise the Exception, we create a class then we pass the class to specific procedure to raise it, we don't call any element of that class.
Code:
If we could do MyExcept.Raise then we should pass the except as self here, but we do raise MyExcept, which take a parameter to the System._RaiseExcept which has hidden way (aka compiler magic) to fill the parameter with the exception class, meaning it is declared as such
type
TMyException = class(Exception) end; var MyExcept: TMyException; begin MyExcept.Create('Error Message'); // we do raise MyExcept; // and there is no way to raise it from within like MyExcept.raise; end.
Code:
The fact we pass the created exception as parameter is merely a coincidence.
procedure RaiseExcept(Obj: TObject);
Zitat:
Also these strings in Delphi are the same in other languages (eg. C#..), in all cases these GUID strings will be translated into bytes from their hex values, into the specific structure to be read then looked up. So if you use a hex editor/viewer on an application, you will not find any string like these GUID in an interface, but you will find the HEX values for them. |
AW: In Asm-Prozedur eine Exception auslösen
@kas ob
First, the only Standard Interrupt on Windows is INT 3. It will be handled as/for Debug reason. This Interrupt is addressed into the GDT, and IDT Table (that is an Operating System Issue). I don't want go into the depth with this, because it will cover more things, that you don't understand. Again, you need to create a Instance of a Exception Class to "stack up" the Exception. Each Exception (class) need then stack Prolog, and Epilog. The Prolog is for clean "build stack", the Epilog is for clean "destroy stack". This is a very import memory thing, because each Exception "can" have Parameters like .Create(42); or .Create('foo'); or .Create('foo','fufu',42); or simply .Create; Exception's will be "raise" with: raise EExceptionClass.Create; or EExceptionClass.Create(42); ... Again, you can not do simply raise EExceptionClass.MyExcept; because raise point then into memory where "not" your code have access, and Windows will prompt you with MAV's. Second, Microsoft Windows uses very often COM+ (Component Object Model) things. That is based on the Terminal Server Services, and/or the Remote Access Services (RD Remote Desktop). This services are for centralized the maintain flow of Enterprise/Corporation's firms Computerdesk. To hold the traffic and latency of Applications for this Services on a low Level, Microsoft plays a little bit with it's own technologies. As such, they transmit data in form of image data, and plain text (like numbers that describe, what Function is to call on the counter part of the connection. This is then from Server to Client, and Client to Server. - You can take a look onto the RPC Protocol, and it's implementation (Tools). - You will realize that many things are based on numbers RPC is a very old Protocol from Unix Workstations, and Unix Servers back into the 1970th. |
AW: In Asm-Prozedur eine Exception auslösen
Zitat:
![]() I do understand it all. Zitat:
Zitat:
![]() ![]() So in very short sentences, COM is Windows way to overcome compatibility and portability for code over many or any programming language. COM+ is advanced COM with extra layer of security and authentication. DCOM is Distributed COM, provide the ability be for COM+ to be called and executed remotely, and by remotely not only over wire or Internet connection but also on different users accounts and different session, different domains also supported...etc. That is it. |
AW: In Asm-Prozedur eine Exception auslösen
Zitat:
Don't make you hard on this. I don't can expect that you can understand all these things of Computers and the differences between the Calling Convention, ABI, and Operating interna of each one. Because all OS have it's own kernel behavior. And yes, you can do INT'errupt on 32/64-Bit machines, but then, you have to switch from the 32/64-bit protected-mode into the 16-bit real-mode of the CPU. But doing this, you have to "store" all registers, before you switch, and after you switch back into 64-bit CPU mode, you have to "re-store" all registers to avoid crash or prompts of MAV's. |
AW: In Asm-Prozedur eine Exception auslösen
@paule32.jk :
I am sorry for wasting your time. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz