As far as I can remember, this type of method was not found in the standard OOP versions of languages that were running in DOS."Yes, message methods were first introduced only in Delphi. As noted in message methods (https://www.freepascal.org/docs-html/current/ref/refsu31.html#x83-1050006.6.7) docs, they are primarily intended to ease programming of callback functions in several GUI toolkits, such as Win32 or GTK.
"We can knock our glasses, noble @MarkMLl,toast"in honor of" this wonderful information, but by mentioning the help of the noble @VTwin, "he made it clear" your brief statementmade it clear: "it's for hanging methods onto externally-generated events" and it is an elegant, eloquent, standard English phrase and scientific language to express the desired meaning (excuse me, I love the style English novels).
My next inquiry is: How can there be a variable named Message, and I think it is one of the words of the programming language itself, as it was mentioned in the code that you provided us with ?!"
As far as I can remember, this type of method was not found in the standard OOP versions of languages that were running in DOS."Yes, message methods were first introduced only in Delphi. As noted in message methods (https://www.freepascal.org/docs-html/current/ref/refsu31.html#x83-1050006.6.7) docs, they are primarily intended to ease programming of callback functions in several GUI toolkits, such as Win32 or GTK.
Every time you declare a method this way:the compiler adds an entry with the index NNNN to a separate table of virtual methods (message methods).
procedure SomeMethod(var R); message NNNN;
In the process of working, a certain class (TForm, TApplication, etc), when processing external messages, uses this mechanism through the method TObject.Dispatch(var R), which scans the class hierarchy through the method table to find a suitable index whose value is the first 32-bit number from the R record (in Delphi (http://docwiki.embarcadero.com/RADStudio/Sydney/en/Methods_%28Delphi%29#Message_Methods) - 16-bit).
This is a simple example that I use:
type TVMessage = packed record Id : longint; Param : word; Flag : word; Text : shortstring; end; ... { DispatchMessage Dispatches a message to all forms. This adds a message to the message queue, which will be processsed by the handler after the current process finishes. Define a message id such as: LM_Msg = LM_USER + 1; where LM_USER is defined in LMessages, and a handler such as: procedure OnMessage(var msg: TLMessage); message LM_Msg; } procedure DispatchMessage(Id: dword; Param, Flag: word; Txt: string); var i: integer; f: TForm; m: TVMessage; begin m.Id := Id; m.Param := Param; m.Flag := Flag; m.Text := Txt; for i := 0 to Screen.FormCount - 1 do begin f := Screen.Forms[i]; if (f <> nil) then f.Dispatch(m); end; end;
Then a method in a form:
procedure OnDataChange(var Msg: TVMessage); message OM_DataChange;
"We can knock our glasses, noble @MarkMLl,toast"in honor of" this wonderful information, but by mentioning the help of the noble @VTwin, "he made it clear" your brief statementmade it clear: "it's for hanging methods onto externally-generated events" and it is an elegant, eloquent, standard English phrase and scientific language to express the desired meaning (excuse me, I love the style English novels).
My next inquiry is: How can there be a variable named Message, and I think it is one of the words of the programming language itself, as it was mentioned in the code that you provided us with ?!"
Google has a surprisingly florid turn of phrase. As far as your final question goes, it's important to appreciate that when a compiler parses (qv) the syntax (qv) of a language, it's not simply saying "what patterns can I match on this line". Focussing on the current example, it's saying "OK, I've got the arbitrarily-named variables out of the way, so I must be looking at one of function procedure property end (plus visibility keywords etc.).
So it starts parsing a procedure declaration and gets to the ; terminator. It then looks ahead one token and finds message, but the only thing this can be in this context is a number (etc.) which tells it what actually to do with the declaration it's just read.
MarkMLl
google translate:
"Does "m.Id" need to be equal to "OM_DataChange" to call "OnDataChange"?"
google translate:
"Does "m.Id" need to be equal to "OM_DataChange" to call "OnDataChange"?"
Yes.
OM_DataChange is just a number such as LM_USER + 1. For this program I name the message ids and methods using this convention which is helpful for me. The leading "O" designates the application, just my convention.
Dispatch will recognize On the message number through the first 32 bits of the register which is usually of type Cardinal, the literal string type is also allowed with DispatchStr. Is what I understood correct?"TObject.Dispatch will interpret the structure of the record as if it starts with a 32-bit number. For TObject.DispatchStr - as if there is a ShortString at the beginning.
Dispatch will recognize On the message number through the first 32 bits of the register which is usually of type Cardinal, the literal string type is also allowed with DispatchStr. Is what I understood correct?"TObject.Dispatch will interpret the structure of the record as if it starts with a 32-bit number. For TObject.DispatchStr - as if there is a ShortString at the beginning.
See objpas.inc:
procedure TObject.Dispatch(var message); ... begin index:=dword(message); ...
procedure TObject.DispatchStr(var message); ... begin name:=pshortstring(@message)^; ...
Fabulous! Typecasting has been used in the process of selecting the first bits from theregister"record", a very clever artwork, Lazarus free Pascal is amazing, smart and artistic in its methods, we cannot in the Middle East create a language like this, this is a fact!"
Fabulous! Typecasting has been used in the process of selecting the first bits from theregister"record", a very clever artwork, Lazarus free Pascal is amazing, smart and artistic in its methods, we cannot in the Middle East create a language like this, this is a fact!"
Object Pascal is very nice, yes. But nothing unusual in typecasting, as mentioned above, to make a whole region like the Middle East unable to create a language like this. It is nice to compliment people and their work, but not on the expense of other people.
I had seen some members here express their admiration of Object Pascal on the expense of C and C++.
var //as: integer = 1; //in: integer = 2; //is: integer = 3; //or: integer = 4; //and: integer = 5; //div: integer = 6; //mod: integer = 7; //not: integer = 8; //shl: integer = 9; //shr: integer = 10; //xor: integer = 11; explicit: integer = 12; enumerator: integer = 13; initialize: integer = 14; finalize: integer = 15; addref: integer = 16; copy: integer = 17; inc: integer = 18; dec: integer = 19; //end: integer = 20; //of: integer = 21; //file: integer = 22; identifier: integer = 23; non: integer = 24; //const: integer = 25; real: integer = 26; ordinal: integer = 27; //string: integer = 28; char: integer = 29; wstring: integer = 30; wchar: integer = 31; c: integer = 32; //as: integer = 33; at: integer = 34; //do: integer = 35; //if: integer = 36; //in: integer = 37; //is: integer = 38; //of: integer = 39; //on: integer = 40; //or: integer = 41; //to: integer = 42; add: integer = 43; //and: integer = 44; //asm: integer = 45; //div: integer = 47; //end: integer = 48; far: integer = 49; //for: integer = 50; //mod: integer = 52; //nil: integer = 53; //not: integer = 54; out: integer = 55; //set: integer = 56; //shl: integer = 57; //shr: integer = 58; //try: integer = 59; //var: integer = 60; //xor: integer = 61; //case: integer = 62; //cvar: integer = 64; //else: integer = 65; exit: integer = 66; fail: integer = 67; //file: integer = 68; //goto: integer = 69; huge: integer = 70; name: integer = 71; near: integer = 72; read: integer = 73; self: integer = 74; sysv: integer = 75; //then: integer = 76; //type: integer = 77; //unit: integer = 78; univ: integer = 79; //uses: integer = 80; //with: integer = 81; alias: integer = 82; //array: integer = 83; //begin: integer = 84; break: integer = 85; cdecl: integer = 86; //class: integer = 87; //const: integer = 88; equal: integer = 89; far16: integer = 90; final: integer = 91; index: integer = 92; //label: integer = 93; local: integer = 94; //raise: integer = 95; //until: integer = 96; //while: integer = 97; write: integer = 98; cblock: integer = 100; dispid: integer = 101; divide: integer = 102; //downto: integer = 103; //except: integer = 104; //export: integer = 105; helper: integer = 106; inline: integer = 107; legacy: integer = 108; nested: integer = 109; //object: integer = 110; //packed: integer = 111; pascal: integer = 112; //public: integer = 113; //record: integer = 114; //repeat: integer = 115; result: integer = 116; return: integer = 117; sealed: integer = 118; static: integer = 119; stored: integer = 120; strict: integer = 121; //string: integer = 122; winapi: integer = 124; asmname: integer = 125; basereg: integer = 126; cppdecl: integer = 127; default: integer = 128; dynamic: integer = 129; //exports: integer = 130; //finally: integer = 131; forward: integer = 132; generic: integer = 133; iocheck: integer = 134; //library: integer = 135; message: integer = 136; modulus: integer = 137; package: integer = 138; private: integer = 139; //program: integer = 140; r12base: integer = 141; rtlproc: integer = 142; section: integer = 143; stdcall: integer = 144; syscall: integer = 145; varargs: integer = 146; virtual: integer = 147; absolute: integer = 148; abstract: integer = 149; baselast: integer = 150; basenone: integer = 151; basesysv: integer = 152; constref: integer = 153; contains: integer = 154; continue: integer = 155; //cppclass: integer = 156; //external: integer = 158; //function: integer = 160; implicit: integer = 161; lessthan: integer = 162; location: integer = 163; multiply: integer = 164; mwpascal: integer = 165; negative: integer = 166; noinline: integer = 167; noreturn: integer = 168; notequal: integer = 169; //operator: integer = 170; optional: integer = 171; overload: integer = 172; override: integer = 173; platform: integer = 174; positive: integer = 175; //property: integer = 176; readonly: integer = 177; register: integer = 178; required: integer = 179; requires: integer = 180; resident: integer = 181; safecall: integer = 182; subtract: integer = 183; sysvbase: integer = 184; assembler: integer = 185; basefirst: integer = 186; //bitpacked: integer = 187; bitwiseor: integer = 188; hardfloat: integer = 189; //inherited: integer = 190; intdivide: integer = 191; //interface: integer = 192; interrupt: integer = 193; leftshift: integer = 194; logicalor: integer = 195; nodefault: integer = 196; objcclass: integer = 197; //otherwise: integer = 198; //procedure: integer = 199; protected: integer = 200; published: integer = 201; reference: integer = 202; softfloat: integer = 203; //threadvar: integer = 204; writeonly: integer = 205; bitwiseand: integer = 206; bitwisexor: integer = 207; deprecated: integer = 208; //destructor: integer = 209; //enumerator: integer = 210; implements: integer = 211; //initialize: integer = 212; internproc: integer = 213; logicaland: integer = 214; logicalnot: integer = 215; logicalxor: integer = 216; oldfpccall: integer = 217; openstring: integer = 218; rightshift: integer = 219; specialize: integer = 220; vectorcall: integer = 221; //constructor: integer = 222; greaterthan: integer = 223; internconst: integer = 224; reintroduce: integer = 225; shortstring: integer = 226; compilerproc: integer = 227; experimental: integer = 228; //finalization: integer = 229; ms_abi_cdecl: integer = 230; nostackframe: integer = 231; objccategory: integer = 232; objcprotocol: integer = 233; //weakexternal: integer = 234; //dispinterface: integer = 235; unimplemented: integer = 236; //implementation: integer = 237; //initialization: integer = 238; ms_abi_default: integer = 239; //resourcestring: integer = 240; sysv_abi_cdecl: integer = 241; lessthanorequal: integer = 242; sysv_abi_default: integer = 243; greaterthanorequal: integer = 244; true: integer = 245; false: integer = 246;
"I think this is a really C ++ style!"
You may not pay any attention to your opinion and think it is simple and it may be very dangerous in the eyes of some other cultures.
If there is no special work for a nation that causes admiration for others, there are other motives that make others think that that nation is not worthy of life.
It is very important that you have something that I am very impressed with and I would like to learn from you, I think you now understand."
You may not pay any attention to your opinion and think it is simple and it may be very dangerous in the eyes of some other cultures.
This is a different topic. Did Google translation confuse you?If there is no special work for a nation that causes admiration for others, there are other motives that make others think that that nation is not worthy of life.
I hope that is not the case in your eyes. When you use the word "nation", do you mean a group of people confined to some political border, a specific race, or some other meaning?
Would you consider getting rid of dictators as part of "special work"? or do you consider keeping millions of people under the boot heels of one family as "special work"?It is very important that you have something that I am very impressed with and I would like to learn from you, I think you now understand."
Now this is bad. I do not have any intention to try to impress you or anyone else for that matter. But I do have the intention to help people learn and solve their problems.
var //as: integer = 1; //in: integer = 2; //is: integer = 3; //or: integer = 4; //and: integer = 5; //div: integer = 6; //mod: integer = 7; //not: integer = 8; //shl: integer = 9; //shr: integer = 10; //xor: integer = 11; explicit: integer = 12; enumerator: integer = 13; initialize: integer = 14; finalize: integer = 15; addref: integer = 16; copy: integer = 17; inc: integer = 18; dec: integer = 19; //end: integer = 20; //of: integer = 21; //file: integer = 22; identifier: integer = 23; non: integer = 24; //const: integer = 25; real: integer = 26; ordinal: integer = 27; //string: integer = 28; char: integer = 29; wstring: integer = 30; wchar: integer = 31; c: integer = 32; //as: integer = 33; at: integer = 34; //do: integer = 35; //if: integer = 36; //in: integer = 37; //is: integer = 38; //of: integer = 39; //on: integer = 40; //or: integer = 41; //to: integer = 42; add: integer = 43; //and: integer = 44; //asm: integer = 45; //div: integer = 47; //end: integer = 48; far: integer = 49; //for: integer = 50; //mod: integer = 52; //nil: integer = 53; //not: integer = 54; out: integer = 55; //set: integer = 56; //shl: integer = 57; //shr: integer = 58; //try: integer = 59; //var: integer = 60; //xor: integer = 61; //case: integer = 62; //cvar: integer = 64; //else: integer = 65; exit: integer = 66; fail: integer = 67; //file: integer = 68; //goto: integer = 69; huge: integer = 70; name: integer = 71; near: integer = 72; read: integer = 73; self: integer = 74; sysv: integer = 75; //then: integer = 76; //type: integer = 77; //unit: integer = 78; univ: integer = 79; //uses: integer = 80; //with: integer = 81; alias: integer = 82; //array: integer = 83; //begin: integer = 84; break: integer = 85; cdecl: integer = 86; //class: integer = 87; //const: integer = 88; equal: integer = 89; far16: integer = 90; final: integer = 91; index: integer = 92; //label: integer = 93; local: integer = 94; //raise: integer = 95; //until: integer = 96; //while: integer = 97; write: integer = 98; cblock: integer = 100; dispid: integer = 101; divide: integer = 102; //downto: integer = 103; //except: integer = 104; //export: integer = 105; helper: integer = 106; inline: integer = 107; legacy: integer = 108; nested: integer = 109; //object: integer = 110; //packed: integer = 111; pascal: integer = 112; //public: integer = 113; //record: integer = 114; //repeat: integer = 115; result: integer = 116; return: integer = 117; sealed: integer = 118; static: integer = 119; stored: integer = 120; strict: integer = 121; //string: integer = 122; winapi: integer = 124; asmname: integer = 125; basereg: integer = 126; cppdecl: integer = 127; default: integer = 128; dynamic: integer = 129; //exports: integer = 130; //finally: integer = 131; forward: integer = 132; generic: integer = 133; iocheck: integer = 134; //library: integer = 135; message: integer = 136; modulus: integer = 137; package: integer = 138; private: integer = 139; //program: integer = 140; r12base: integer = 141; rtlproc: integer = 142; section: integer = 143; stdcall: integer = 144; syscall: integer = 145; varargs: integer = 146; virtual: integer = 147; absolute: integer = 148; abstract: integer = 149; baselast: integer = 150; basenone: integer = 151; basesysv: integer = 152; constref: integer = 153; contains: integer = 154; continue: integer = 155; //cppclass: integer = 156; //external: integer = 158; //function: integer = 160; implicit: integer = 161; lessthan: integer = 162; location: integer = 163; multiply: integer = 164; mwpascal: integer = 165; negative: integer = 166; noinline: integer = 167; noreturn: integer = 168; notequal: integer = 169; //operator: integer = 170; optional: integer = 171; overload: integer = 172; override: integer = 173; platform: integer = 174; positive: integer = 175; //property: integer = 176; readonly: integer = 177; register: integer = 178; required: integer = 179; requires: integer = 180; resident: integer = 181; safecall: integer = 182; subtract: integer = 183; sysvbase: integer = 184; assembler: integer = 185; basefirst: integer = 186; //bitpacked: integer = 187; bitwiseor: integer = 188; hardfloat: integer = 189; //inherited: integer = 190; intdivide: integer = 191; //interface: integer = 192; interrupt: integer = 193; leftshift: integer = 194; logicalor: integer = 195; nodefault: integer = 196; objcclass: integer = 197; //otherwise: integer = 198; //procedure: integer = 199; protected: integer = 200; published: integer = 201; reference: integer = 202; softfloat: integer = 203; //threadvar: integer = 204; writeonly: integer = 205; bitwiseand: integer = 206; bitwisexor: integer = 207; deprecated: integer = 208; //destructor: integer = 209; //enumerator: integer = 210; implements: integer = 211; //initialize: integer = 212; internproc: integer = 213; logicaland: integer = 214; logicalnot: integer = 215; logicalxor: integer = 216; oldfpccall: integer = 217; openstring: integer = 218; rightshift: integer = 219; specialize: integer = 220; vectorcall: integer = 221; //constructor: integer = 222; greaterthan: integer = 223; internconst: integer = 224; reintroduce: integer = 225; shortstring: integer = 226; compilerproc: integer = 227; experimental: integer = 228; //finalization: integer = 229; ms_abi_cdecl: integer = 230; nostackframe: integer = 231; objccategory: integer = 232; objcprotocol: integer = 233; //weakexternal: integer = 234; //dispinterface: integer = 235; unimplemented: integer = 236; //implementation: integer = 237; //initialization: integer = 238; ms_abi_default: integer = 239; //resourcestring: integer = 240; sysv_abi_cdecl: integer = 241; lessthanorequal: integer = 242; sysv_abi_default: integer = 243; greaterthanorequal: integer = 244; true: integer = 245; false: integer = 246;
var //as: integer = 1; //in: integer = 2; //is: integer = 3; //or: integer = 4; //and: integer = 5; //div: integer = 6; //mod: integer = 7; //not: integer = 8; //shl: integer = 9; //shr: integer = 10; //xor: integer = 11; explicit: integer = 12; enumerator: integer = 13; initialize: integer = 14; finalize: integer = 15; addref: integer = 16; copy: integer = 17; inc: integer = 18; dec: integer = 19; //end: integer = 20; //of: integer = 21; //file: integer = 22; identifier: integer = 23; non: integer = 24; //const: integer = 25; real: integer = 26; ordinal: integer = 27; //string: integer = 28; char: integer = 29; wstring: integer = 30; wchar: integer = 31; c: integer = 32; //as: integer = 33; at: integer = 34; //do: integer = 35; //if: integer = 36; //in: integer = 37; //is: integer = 38; //of: integer = 39; //on: integer = 40; //or: integer = 41; //to: integer = 42; add: integer = 43; //and: integer = 44; //asm: integer = 45; //div: integer = 47; //end: integer = 48; far: integer = 49; //for: integer = 50; //mod: integer = 52; //nil: integer = 53; //not: integer = 54; out: integer = 55; //set: integer = 56; //shl: integer = 57; //shr: integer = 58; //try: integer = 59; //var: integer = 60; //xor: integer = 61; //case: integer = 62; //cvar: integer = 64; //else: integer = 65; exit: integer = 66; fail: integer = 67; //file: integer = 68; //goto: integer = 69; huge: integer = 70; name: integer = 71; near: integer = 72; read: integer = 73; self: integer = 74; sysv: integer = 75; //then: integer = 76; //type: integer = 77; //unit: integer = 78; univ: integer = 79; //uses: integer = 80; //with: integer = 81; alias: integer = 82; //array: integer = 83; //begin: integer = 84; break: integer = 85; cdecl: integer = 86; //class: integer = 87; //const: integer = 88; equal: integer = 89; far16: integer = 90; final: integer = 91; index: integer = 92; //label: integer = 93; local: integer = 94; //raise: integer = 95; //until: integer = 96; //while: integer = 97; write: integer = 98; cblock: integer = 100; dispid: integer = 101; divide: integer = 102; //downto: integer = 103; //except: integer = 104; //export: integer = 105; helper: integer = 106; inline: integer = 107; legacy: integer = 108; nested: integer = 109; //object: integer = 110; //packed: integer = 111; pascal: integer = 112; //public: integer = 113; //record: integer = 114; //repeat: integer = 115; result: integer = 116; return: integer = 117; sealed: integer = 118; static: integer = 119; stored: integer = 120; strict: integer = 121; //string: integer = 122; winapi: integer = 124; asmname: integer = 125; basereg: integer = 126; cppdecl: integer = 127; default: integer = 128; dynamic: integer = 129; //exports: integer = 130; //finally: integer = 131; forward: integer = 132; generic: integer = 133; iocheck: integer = 134; //library: integer = 135; message: integer = 136; modulus: integer = 137; package: integer = 138; private: integer = 139; //program: integer = 140; r12base: integer = 141; rtlproc: integer = 142; section: integer = 143; stdcall: integer = 144; syscall: integer = 145; varargs: integer = 146; virtual: integer = 147; absolute: integer = 148; abstract: integer = 149; baselast: integer = 150; basenone: integer = 151; basesysv: integer = 152; constref: integer = 153; contains: integer = 154; continue: integer = 155; //cppclass: integer = 156; //external: integer = 158; //function: integer = 160; implicit: integer = 161; lessthan: integer = 162; location: integer = 163; multiply: integer = 164; mwpascal: integer = 165; negative: integer = 166; noinline: integer = 167; noreturn: integer = 168; notequal: integer = 169; //operator: integer = 170; optional: integer = 171; overload: integer = 172; override: integer = 173; platform: integer = 174; positive: integer = 175; //property: integer = 176; readonly: integer = 177; register: integer = 178; required: integer = 179; requires: integer = 180; resident: integer = 181; safecall: integer = 182; subtract: integer = 183; sysvbase: integer = 184; assembler: integer = 185; basefirst: integer = 186; //bitpacked: integer = 187; bitwiseor: integer = 188; hardfloat: integer = 189; //inherited: integer = 190; intdivide: integer = 191; //interface: integer = 192; interrupt: integer = 193; leftshift: integer = 194; logicalor: integer = 195; nodefault: integer = 196; objcclass: integer = 197; //otherwise: integer = 198; //procedure: integer = 199; protected: integer = 200; published: integer = 201; reference: integer = 202; softfloat: integer = 203; //threadvar: integer = 204; writeonly: integer = 205; bitwiseand: integer = 206; bitwisexor: integer = 207; deprecated: integer = 208; //destructor: integer = 209; //enumerator: integer = 210; implements: integer = 211; //initialize: integer = 212; internproc: integer = 213; logicaland: integer = 214; logicalnot: integer = 215; logicalxor: integer = 216; oldfpccall: integer = 217; openstring: integer = 218; rightshift: integer = 219; specialize: integer = 220; vectorcall: integer = 221; //constructor: integer = 222; greaterthan: integer = 223; internconst: integer = 224; reintroduce: integer = 225; shortstring: integer = 226; compilerproc: integer = 227; experimental: integer = 228; //finalization: integer = 229; ms_abi_cdecl: integer = 230; nostackframe: integer = 231; objccategory: integer = 232; objcprotocol: integer = 233; //weakexternal: integer = 234; //dispinterface: integer = 235; unimplemented: integer = 236; //implementation: integer = 237; //initialization: integer = 238; ms_abi_default: integer = 239; //resourcestring: integer = 240; sysv_abi_cdecl: integer = 241; lessthanorequal: integer = 242; sysv_abi_default: integer = 243; greaterthanorequal: integer = 244; true: integer = 245; false: integer = 246;
If you prefix the keywords with & (e.g. &begin) you can use them as identifiers as well.
If you prefix the keywords with & (e.g. &begin) you can use them as identifiers as well.
If you prefix the keywords with & (e.g. &begin) you can use them as identifiers as well.
Not something I am likely to use, but interesting to know none the less.
"a stranger"Strange"! "as" If in the period of DOS in the working languages under it it was not allowed to use aregistered"reserved" word, and now we see asindicated"mentioned" by @engkin and as youindicated"mentioned" that it can be used as identifiers, even with a simple configuration such as adding "&", perhaps in order to increase the flexibility of the language."
"a stranger"Strange"! "as" If in the period of DOS in the working languages under it it was not allowed to use aregistered"reserved" word, and now we see asindicated"mentioned" by @engkin and as youindicated"mentioned" that it can be used as identifiers, even with a simple configuration such as adding "&", perhaps in order to increase the flexibility of the language."
It was originally introduced for COM dispatch interface support. There you can have code like this when named arguments are used:
var v: OleVariant; begin v := CreateTheDispatchIntf; v.SomeFunc(&Begin:=21, &End:=42); end.
And as they're named arguments they need to be passed to the dispatch interface as is as the interface is possibly provided by some third party software (e.g. Microsoft Office or whatever), thus the usual tricks of using e.g. _begin won't work.
"This is accurate and advanced information. I have not used or read about OLE before. By looking at the following link, it seems that this topic is somewhat advanced in visual programming https://wiki.freepascal.org/Olevariant (https://wiki.freepascal.org/Olevariant)"
"This is accurate and advanced information. I have not used or read about OLE before. By looking at the following link, it seems that this topic is somewhat advanced in visual programming https://wiki.freepascal.org/Olevariant (https://wiki.freepascal.org/Olevariant)"
It's advanced, yes (though Object Pascal greatly simplifies it compared to e.g. C++), but it's not only visual programming: OLE (and COM) are very prevalent in the Windows world and you can use them to interface with Microsoft Office, Internet Explorer, Windows Management Instrumentation, Windows Explorer, Active Directory, OLE DB, etc.