MDL Syntax

Hello. New guy here...well, old new guy :D

Was a MicroStation user for many years (many years ago) and took the one and only MDL programming course that was available at the time. Getting sucked back into the MicroStation world and trying to recompile an MDL app. I'm slowly working my way through it, but have hit something I'm not sure how to fix. I looked and am not finding much in the help files.

The offending line of code is:

mdlBitMask_logicalOperation(
 (*type)->view.files[k].levels,
 view->files[j].levels,
 BITMASK_OR);

I understand the the arguments are now BitMaskP and BitMaskCP, but just have no idea what the above code is doing. Are there resources out there to explain what this syntax means?

Thanks in advance for any direction...

  • As Jon stated -> is the pointer operator.  In essence it's a shortcut for (*info).num_file.  It reads better and is commonly used.

  • So, I got this thing to compile :-) Thanks for help provided thus far!!!!

    My next question is...there's a whole lot of files in the folder structure for this thing. For clarity, I would like to remove anything not required to build this MDL app. How do I know what is being used? Obviously the ones I had to edit are being used. Does the .mke file tell me everything I need to keep?

    Also, I tried to recompile a different app, but nothing new got created when I ran bmake for that app. Is that because there were no changes to any of the source files? The only file that changed was the make.opt file. I guess I'm asking how to FORCE a compile in case you are not sure if the existing .ma file was created from the existing source.

    Thanks again!!

  • Hi Bruce,

    your questions are about to understand how C and C++ code is compiled to object files and linked to exe or dll. This process is not specific to MDL, so you can use any C (e.g. GCC) tutorial. There are some differences (especially resources, that are not part of standard C/C++ but specific to MicroStation), but it's quite similar.

    I guess you should start with Building Application chapter in MicroStation Programmer Guide.

    Unknown said:
    How do I know what is being used?

    There is no simple answer, because it's developer's responsibility to maintain clean file and folder structure. Compiler and linker only process defined files and don't care about others.

    When an editor like Visual Studio is configured properly, it can help, because dev editors are able to parse C files (despite of it's not C but "MicroStation version of C") and to understand all #include statements.

    Another way can be to create a list of source files and to fulltext search other file whether they are used there or in mke file.

    And if there are not many files, you can remove everything except mke file, start compilation again and again and to return back removed files, but in every step only the file reported as missing.

    Unknown said:
    Does the .mke file tell me everything I need to keep?

    In idea case yes, but the world is not ideal.  But it's good start.

    Unknown said:
    I guess I'm asking how to FORCE a compile in case you are not sure if the existing .ma file was created from the existing source.

    There are two way how to achieve the full recompilation:

    • Use -a bmake.exe parameter, so insted of bmake <yourapp>.mke, use bmake -a <yourapp>.mke
      I also recommend to study all available parameters, that are listed when bmake is started as bmake -?
    • Remove all temporary object files, so they have to be recreated again to be processed by linker. Where the files are created depends on dev shell and mke file configuration, but it's mentioned by bmake in the list when the files are processed. For example it can be C:\Program Files (x86)\Bentley\MicroStation V8i (SELECTseries)\MicroStation\mdl\objects\, but sometimes there are more folders configured for different types of objects.

    With regards,

      Jan