Hi,actually I'm migrating a V8i-MDL to Connect.Linking my MDL App with mdlbltin.lib, results in a LNK2019 error, Symbol "__imp_mdlBspline_extractCurve" is missing.This function is contained in msbspline.fdf, so compiling works fine, but mdlBspline_extractCurve() seems not to be compiled into Microstation. It is missing in the ustation.dll, when I open this file with the Visual Studio Dependency Walker.I have to stroke a Bspline-Curve contained in an element descriptor. In my V8i-MDL I did this calling mdlBspline_extractCurve() first, filling in a MSBsplineCurve structure, and then call mdlBspline_evaluateCurve() to stroke the curve.How is this task solved on Connect?
Tom
Tom Torell said:It is missing in the ustation.dll
MicroStationAPI help tells us Required Library: msbspline.dll
However, I don't see that DLL in the MicroStation folder or the .lib in the SDK\library folder. There is a splindlm.lib; what does that provide?
SDK\library
splindlm.lib
In the brave new world of MicroStationAPI C++ programming you will find the MSBsplineCurve and MSBsplineSurface classes. An ICurvePrimitive, for example, can obtain a MSBsplineCurve. See SDK example PrimitiveCurveExample.
MSBsplineCurve
MSBsplineSurface
ICurvePrimitive
Regards, Jon Summers LA Solutions
Tom Torell,In addition to Jon's correct and helpful advice to start to move and improve your code using the new and robust C++ classes, you should still be able (for now until potentially deprecated) to use mdlBspline_extractCurve() given the following Header and Static Library referenced are included:
C:\PROGRA~1\Bentley\MICROS~2\examples>sdkinc C:\PROGRA~1\Bentley\MICROS~2\include>s mdlBspline_extractCurve * Mstn\MdlApi\msbsplin.fdf:1274:MSCORE_EXPORT int mdlBspline_extractCurve Mstn\MdlApi\msbsplin.fdf:1415:* @see mdlBspline_extractCurve Mstn\MdlApi\msbsplin.fdf:3065:MSCORE_EXPORT int mdlBspline_extractCurveNormal C:\PROGRA~1\Bentley\MICROS~2\include>sdklib C:\PROGRA~1\Bentley\MICROS~2\library>sb mdlBspline_extractCurve * mdlbltin.lib
HTH,Bob
Bob,unfortunately I'm still not able to link my application; I assume my version of mblbltin.lib does not contain mdlBspline_extractCurve() (see my mblbltin.lib attached)
Edit:
unfortunately I'm still not able to link my application; I assume my version of mdlbltin.lib does not contain mdlBspline_extractCurve() (see my mdlbltin.lib attached)I installed ms10100023en_updt10.exe andmssdk10100032en.msiRegardsTom
mdlbltin.zip
Edit
I looked into the symbols defined in the library; mdlBspline_extractCurve() seems to be missing:
F:\Users\Tom\Temp>dir mdlbltin.lib Datenträger in Laufwerk F: ist Users (820 GB) Volumeseriennummer: 6759-4D8D Verzeichnis von F:\Users\Tom\Temp 07.08.2018 02:10 4.386.082 mdlbltin.lib 1 Datei(en), 4.386.082 Bytes 0 Verzeichnis(se), 337.336.811.520 Bytes frei F:\Users\Tom\Temp>dumpbin /EXPORTS mdlbltin.lib > symbols.txt F:\Users\Tom\Temp>findstr mdlBspline_extractCurve symbols.txt mdlBspline_extractCurveNormal F:\Users\Tom\Temp>
Tom Torell said:I assume my version of mblbltin.lib
Spelling: mdlbltin.lib not mblbltin.lib!
mdlbltin.lib
mblbltin.lib
Tom Torell. Let me check on the export definitions between the two libraries to see what publishing scope may have changed. I will report back as soon as I can and if necessary, schedule to correct it in an upcoming release.Thank you,Bob
Jon,
you are right. Sorry, that was a mistype by my touch system.
I assume, the name stands for "Microstation Development Language built in library".
I corrected the misspelling in my post above, to make it googelable.
Regards, Tom
Bob,could you check the export definitions between the two libraries in the meantime?Will the function mdlBspline_extractCurve() be provided in the next upcoming release of CONNECT?Regards,Tom
Hi Tom Torell,
Sorry for not getting a response to this issue sooner as Artur and I discussed your SR 7000850984 today. We may be able to file a regression defect for the return of mdlBspline_extractCurve(), though we were able to find some Old/New MDL C API migration code for that exact function as a work-around.
As Jon Summers mentions, ideally when migrating your code you will want to prefer using the New MDL C++ API classes as much as possible. In this case you should try to use the MSBsplineCurve class (vs. prior element typedef struct) whenever possible, then continue to use prior (though in need of update) MDL C API signatures for 1:1 migration where needed.
As you can see below, it appears very little change is required and your output element will be an MSBsplineCurve where you can then access all point data needed directly from the instance.
OLD
MSBsplineCurve curve; memset (&curve, 0, sizeof (curve));
mdlBspline_extractCurve (NULL, &curve.type, &curve.rational,
&curve.display, &curve.params, &curve.poles, &curve.knots,
&curve.weights, *ppED);
NEW
mdlBspline_convertToCurve (&curve, *ppED);
If you find you need any other migration conversions, please feel free to Search and Post any new questions.
HTH,Bob (and Artur)
Answer Verified By: Tom Torell
Hi Bob,
thank you very much; this is exactly I was looking for. It works now!
Regards,
Again, sorry for the delay and so glad to hear that you are up and running on this issue.
Bob