OK, so basically you can compile ARX/DBX for Mac. Only you have to not only compile for 64bit OSX code, but it needs to be renamed to *.dylib for DBXes and *.bundle / *.framework for ARXes. Now for the "tricky" bit, what about
BricsCAD for linux? It seems they have an API to compile their BRXes for linux:
...is identical to the one for Windows. The sole difference is that it contains Linux-specific link libraries, instead of ones specific to Windows...
So I guess it compiles to *.so (shared object) files.
So that means ARX/DBX works fine on Mac (as long as you don't use any MFC stuff). BRX works fine on Linux and they have:
...the BRX Linux SDK includes the Windows Platform Emulation Layer, which provides a large set of Windows API functions under Linux.
Which probably means that some calls to MFC would work there. Wish ADesk would do something similar to MFC->Cocoa, then you could create dialogs in your ARXes - and it might be possible to run ODCL through it.
Anyhow, the next step would be to check if a acedDefun would still be callable from Lisp on Mac/Linux:
... The following call to acedDefun() specifies that AutoLISP will recognize an external function called doit in AutoLISP, and that when AutoLISP invokes doit, it passes the function code zero (0) to the ObjectARX application: acedDefun("doit", 0);
The string that specifies the name of the new external function can be any valid AutoLISP symbol name. AutoLISP converts it to all uppercase and saves it as a symbol of the type Exsubr ...
So those thing "should" work, I guess...
Doing it from Lisp is not possible. As I've mentioned before, I was thinking to use a similar strategy as was done for the ActiveX stuff: i.e. have a few acedDefuns which would create linking functions on the fly to DotNet DLL's. This "should" be possible as you can use reflection on DotNet DLL's and then create defuns to link to each, or simply use a similar idea as per vlax-invoke, vlax-get & vlax-put. But the reason I asked about reflection on ARXes: Since DotNet's not available to Mac/Linux, the reflection on DLLs is a bit useless on those systems - even if you could make those defuns.
Though it seems reflection's only available on COM (ActiveX) and Net DLLs:
http://www.codeproject.com/KB/DLL/Execute_DLL_Function.aspMaybe this thread should be split in 2 though: One for implementing CL default library functions (which would mostly be possible direct through ALisp), the other about implementing ObjectARX calls as External Subs to be called from ALisp.
Edit: Possibly I should start a few Wiki pages somewhere to use as planning for these functions? Just so we can make sure of naming conventions & standardizing argument lists!