1. COM ON!!! ... OLE!!! AYE CARRAMBA!!
- Posted by Mike The Spike <mtsreborn at yahoo.com> Mar 15, 2001
- 500 views
Agh... You saw the 3DEL, (3D Engines List) and think 'Hey! That's cool! Lemme download one!'... But then you figure 'Oh crap! I can't use these with Euphoria, for they are C libraries!!'... [Intermezzo; What do you nottice? That Euphoria should be able to link to C libraries, like I showed you with the translator and MTSECW.] So you figure; "No biggy! Let's download a 3D Engine for Euphoria from the Archive!"... What?? No engines?? Why is that?? [Intermezzo; The reason for there being no engines is because of the fact that Euphoria is too slow to code one in, and you can't use special toolkits like Direct X or Glide to boost performance, because Eu don't support linking to COM and C libraries.] Ah well, let's forget about this and download Morfit anyways, as it's the only engine there for Euphoria. I guess I'll have to put up with the poor performance, restricting liberty, closed-sourceness, unportability, unextendibility, and that damned logo that pops up at startup. Oh, and I can't sell my games eighter... Yet even if I could, who'd buy a game that was coded with a toy like Morfit? NO ONE! Why is MTS jumping onto 3D engines and games again? Because let's face it, EVERYONE HERE is here for the sole fact that videogames exist. Is it the 50 year old ex-BASICA coder that started out programming trying to create some platform games for the C64 back in the 80's? Or that 17 year old nebie that saw Quake III and thought he could make a better game, he looked up how, and found out he should learn how to 'Program'... Games games games, they are the number one entertainement market out there, beating movies (there are more people with a Gameboy that people with a VCR). You wanna make cash as a coder? Big cash? While working at home? You start coding a game. Now why is it that Euphoria is so damned bad at game coding? No, that's not a question... It's an awnser, see, this is why; - No COM support (DX? Nope, sorry...) - No portability (PSX? PS2? N64? Nope, sorry...) - No interfacing with C (Glide? Glut? Nope, sorry...) And... And... (*shakes fist*) ...ah (w)hell, you get my drift... Mike The Spike
2. Re: COM ON!!! ... OLE!!! AYE CARRAMBA!!
- Posted by RedDan11 at AOL.COM Mar 15, 2001
- 460 views
I'm afraid I'm going to have to side with Matt on this one. Euphoria isn't made to crank in the $'s with videogames. You can't make the language something it's not. If you don't like it don't use it. -Dan
3. Re: COM ON!!! ... OLE!!! AYE CARRAMBA!!
- Posted by Euman <euman at bellsouth.net> Mar 20, 2001
- 476 views
Go to http://www.pbq.com.au/home/hutch/masm.htm download the latest MASM32 there are code docs to interface to COM thru assembler and if you know assembler I presume you'll get it going..... Euman ----- Original Message ----- From: "Matthew Lewis" <matthewwalkerlewis at YAHOO.COM> To: "EUforum" <EUforum at topica.com> Sent: Tuesday, March 20, 2001 13:23 Subject: RE: COM ON!!! ... OLE!!! AYE CARRAMBA!! | | | | | > -----Original Message----- | > From: Mike The Spike [mailto:mtsreborn at yahoo.com] | | <snip> | | > Now what is offset+4? | > Is it IID_IDirect3DRM->CreateViewport? | > You should do a lot of work figuring out at wich | > offset members are, in theory it's all possible, but | > for practical uses, it's not. | > Just like it's theoretically possible to travel | > through time, it don't mean we can go for a trip to | > the middle ages for 29.95 pluss tax? | | I think you're being a bit over dramatic [again]. If you know the layout of | the interface, it's easy. You'd have to know this to use C++ to work with | COM. You have to know this in _any_ language to work with COM. So what's | the big deal? | | I've done some more poking around, and I think it's definitely possible. | Even if you don't have the docs on the layout of an interface, using | IDispatch, it should be possible to get the info that's needed. In fact, it | should be able to spit out a bare bones wrapper for a COM object. | | As far as I can tell, there's no real need to use an actual pointer table in | memory. We could simply use sequences to keep track of things, the same way | we already use them to deal with routine_id's. | | I've looked a little harder at asm.e, and it's not quite as hard as I | thought (I think :). I need to add support for CALL FAR, but that looks | pretty straightforward. I should have Eu working with COM pretty shortly | given that. | | > In conclusion, your compiler should support by-name | > refferncing of structure/class/interface members for | > COM to work. | | Maybe so, but that just means a little extra work if you want to support | COM. Certainly doesn't make anything _impossible_, as you say. Here's what | I envision use of my wrappers might look like: | | -- file: com.ew | global constant | iid_iunknown = "00000000-0000-0000-C000-000000000046" | -- end com.ew | | constant | myobj = new_com_object( clsid ), | myobj_queryinterface = define_com_func( clsid, iid_iunknown, | "QueryInterface") | | object ok | | ok = com_func( myobj, myobj_queryinterface, {} ) | | Basically, I want to make it operate as close to Eu's c_proc/c_func as | possible, although it will handle string conversions automatically, since | all COM strings need to be unicode. Then it makes sense to write wrappers | for individual COM objects using the COM wrappers. | | > Besides, you talk about GUIDs, look up how you have to | > work with GUIDs, and you'll see that it's by using | > some COM interfaces. It's the whole chicken-and-egg | > thing. | | Yeah, I have. But I don't understand what you're talking about. The issue | of GUID's is there no matter what language you use. It's not _that_ | difficult to use them. Here's a proc for converting a GUID from a string to | a proper GUID structure: | | procedure poke_guid( sequence guid, atom ptr ) | object ok | | -- struct GUID | -- DWORD Data1 | -- WORD Data2 | -- WORD Data3 | -- BYTE Data4[8] | | ok = value( "#" & guid[1..8] ) | ok = ok[2] | poke4( ptr, ok ) | ptr += 4 | | guid = guid[10..length(guid)] | | for i = 1 to 2 do | ok = value( "#" & guid[1..4] ) | ok = ok[2] | poke4(ptr, ok) | ptr += 2 | guid = guid[6..length(guid)] | end for | | for i = 1 to 2 do | ok = value( "#" & guid[1..2] ) | ok = ok[2] | poke(ptr,ok) | ptr += 1 | guid = guid[3..length(guid)] | end for | | guid = guid[2..length(guid)] | | for i = 1 to 6 do | ok = value( "#" & guid[1..2] ) | ok = ok[2] | poke(ptr,ok) | ptr += 1 | guid = guid[3..length(guid)] | end for | | end procedure | | There. That wasn't so hard, was it? | | Matt Lewis | | | |