Hello,
After one full evening of research, I decided to post my nooby problem here. Basically, I just want to start a microstation project in Viz Studio 2013.
I had both include Microstation :
MicroStation\mdl\includeMicroStation\mdl\MicroStationAPI
Into the main file, I added
#define winNT#include <MicroStation.API>BEGIN_BENTLEY_NAMESPACE
That's all, but compiler returns me many error (14), these are the 4 firsts :
Error 1 error C2146: syntax error : missing ';' before identifier 'size_type' c:\users\tom\bentley\microstation\mdl\include\memutilallocator.h 42 1 MdlTESTError 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\tom\bentley\microstation\mdl\include\memutilallocator.h 42 1 MdlTESTError 3 error C2146: syntax error : missing ';' before identifier 'difference_type' c:\users\tom\bentley\microstation\mdl\include\memutilallocator.h 43 1 MdlTESTError 4 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\tom\bentley\microstation\mdl\include\memutilallocator.h 43 1 MdlTEST
Anyway, I cannot do anything, it's always wrong somewhere into these files.
Of course I checked all http://www.la-solutions.co.uk/content/Publications-MDL.htm#ArticleIndexDevTools, thanks Jon, but I couldn't find a solution.
Could you see what's wrong ??
Thank you and have a nice day
Tom
Unknown said: I just want to start a MicroStation project in Viz Studio 2013
When writing a native-code C/C++ application, use the right version of Viz Studio!
Unknown said:#include <MicroStation.API>
No such object MicroStation.API! If it's the header file you want to include, then do this...
#include <MicroStationAPI.h>
Regards, Jon Summers LA Solutions
Yes of course, MicroStation.h
So I am probably using a wrong version, I will try with an old one.
Thank you Jan and Jon for your answers.
I managed to make it work by adding the #include <MicrostationAPI.h> and the #define winNT
But after some tests I don't seem to be able to load a dgn file, I've used the DgnFile class but I don't think it's the right one.
What are you suggesting to be able to simply load a dgn file and dump its elements ?
Thank you again for your help.
Unknown said:What are you suggesting to be able to simply load a dgn file and dump its elements?
A design file contains models, not elements. A DGN file has a collection of DgnModelRefs. If you want elements, then you work with a DgnModelRef.
Thanks Jon, I just added this line:
int fd = mdlSystem_newDesignFile("toto.dgn");
And then the linker returns:
unresolved external symbol _mdlSystem_newDesignFile
The only lib folder I added into the linker path is:
MicroStation\mdl\library
Should I add something else ?
Thank you
Unknown said:The only lib folder I added into the linker path is:
How do you compile your code? Do you use the standard MicroStation SDK way, which means to create own bmake .mke file (which is preferred) or you try to use Visual Studio compilation?
Regards,
Jan
Bentley Accredited Developer: iTwin Platform - AssociateLabyrinth Technology | dev.notes() | cad.point
Jan: I use the Visual Studio compilation, is it wrong ?
Yes, it is wrong ... or better to say you choose a hard way, where it's your responsibility to set everything correctly.
If you use bmake with own (and correct) mke file, everything (nearly) will be set for you automatically. There is a huge number of complex rules hidden in mke and mki files, which if used correctly, cover the most of possible dependencies, settings and configuration requirements.
Test and check any example delivered with MicroStation SDK. They can be compiled usually without any additional change.
No example compile with bmake, it always stop at the line %include mdl.mki into the mke.
Anyway, my purpose is to develop a native windows application. As far as I understand these example will produce a DLL, is that right ?
Should I also use bmake for my native win32 application ?
For the moment I search to fix my last error, the "unresolved external symbol _mdlSystem_newDesignFile" error, it's probably a lib file missing or something ?
Unknown said:No example compile with bmake, it always stop at the line %include mdl.mki into the mke.
You should solve this problem at first, because it means something is wrong with your development environment. Do you use MicroStation SDK development shell to compile the examples?
If the shell is set correctly, the compilation cannot end with any error. Sometimes it's required to start the shell as administrator, because the compilation may create folders inside MicroStation folder tree; also digital signature is recommended to switch off, but there are minor modifications, that can be easily identified. For sure no problem with missing header files or similar problems.
Unknown said:Anyway, my purpose is to develop a native windows application. As far as I understand these example will produce a DLL, is that right ?
Yes and no. MicroStation is not able to load native dll files directly, so ma file, which works as loader, has to be created also. All SDK examples use this approach.
Unknown said:Should I also use bmake for my native win32 application ?
Yes, it's the recommended tool, you can start it from Visual Studio environment.
Okay, I think I'm lost.
Do you have a good resource that explain how to configure Visual Studio to build a win32 app using the microstation sdk ?
There are materials available in BDN Community. If you are not a member, you should think about to become.
There is also nice tutorial Learning MDL Step by Step writen by Yongan Fu available in BDN blog.
Also at Bentley LEARN Server there is MicroStation Programming Learning Path with videos covering different aspects and areas of MicroStation development.
For me it looks like you skip the first important step: To be sure SDK and Visual Studio are installed correctly. And it's easy, because no configuration (or not too many) is required:
After you will be able to compile examples, it's time to configure Visual Studio. But DevShell and bmake will be stil the main tools.
Unknown said: There is also nice tutorial Learning MDL Step by Step writen by Yongan Fu available in BDN blog.
I would like to add a supplement. If you've read Learning MicroStation Addins Step by Step, beware of the chapter 9 because author Yongan.Fu used VS 2010 to compile. I am afraid that it is not suggested although no one mentioned it before.
Unknown said:Beware of the chapter 9 because author Yongan.Fu used VS 2010 to compile
It's not clear what point you are making. An AddIn is written using a .NET language. Any version of Viz Studio can be used to write an AddIn, provided that it is built for the compatible version of the .NET CLR. Currently the compatible version (for MicroStation V8i) is .NET v3.5.
A native-code MDL application must use the correct version of C++. Therefore the developer must use the version of Viz Studio that delivers the correct version of C++. For MicroStation V8i, the correct version is Viz Studio 2005.
However, in this case the question is: "How do I write an application that opens a DGN file without MicroStation?" The MicroStation development tools, using any language, do not let you write a stand-alone application that runs without MicroStation.
Unknown said: An AddIn is written using a .NET language. Any version of Viz Studio can be used to write an AddIn, provided that it is built for the compatible version of the .NET CLR. Currently the compatible version (for MicroStation V8i) is .NET v3.5.
An AddIn is written using a .NET language. Any version of Viz Studio can be used to write an AddIn, provided that it is built for the compatible version of the .NET CLR. Currently the compatible version (for MicroStation V8i) is .NET v3.5.
I am afraid that it is not true and actually I think I did the same things as Tom last week. Here is the result of compiling Addins with VS 2013. It is very similar to what Tom mentioned.
Unknown said:I am afraid that it is not true
It's true and Jon is right, it's possible to use any version of Visual Studio to create MicroStation add-in, as far as a code is compiled into CIL for CLR 2.0 (which is used in NET 2.0 - 3.5). Any NET language can be used like C#, VB.NET or C++/CLI.
Based on what I can see at your screen capture I guess it's a native C++ project, not NET project? If you have a problem with Visual Studio 2013 and NET add-in (not native C++, because VS 2013 compiler is not supported for MicroStation), post a new thread to this forum. I use VS 2013 every day to work on my C#/NET add-ins for MicroStation and other products, so I am sure it works fine.
I rewrite the supplement.
Tom, if you've read Learning MicroStation Addins Step by Step, beware of the chapter 9 because author Yongan.Fu used VS 2010 to compile. Inside the chapter 9 he was using native C++ code. I am afraid that it is not suggested although no one mentioned it before.
Unknown said:Here is the result of compiling Addins with VS 2013
The error messages in your screenshot have nothing to do with the version of Viz Studio. They are caused by missing header (*.h) files. The compiler is telling you that it cannot find the definition of various typedefs. You will have the same error messages with any C++ compiler if it cannot find the definitions of all types used in the source code.
Your experience with the C++ compiler is unrelated to .NET. When you build a .NET AddIn you are using a set of Microsoft tools quite unrelated to those used to build a DLL.
I think Jan has answered your question about the .NET CLR runtime.
Unknown said: The error messages in your screenshot have nothing to do with the version of Viz Studio
The error messages in your screenshot have nothing to do with the version of Viz Studio
NoNoNo....it is incorrect. If you want to avoid the memutilallocator error from Viz Studio 2013.
You need to
And then you will be able to compile it successfully in VS 2013 without memutilallocator error.
Just treat this case as ended. Tom actually didn't tell what is his "Project"' nature (MDL? C++ DLL?) at the very first time.