How to get window main handle?

My code is as follows:


#include <Mstn\MdlApi\MdlApi.h>
#include <Mstn\cmdlist.r.h>
#include <Mstn\MdlApi\msnativewindow.h>
#include <windows.h>
#include <DgnPlatform\DgnFile.h>
#include <DgnPlatform\DgnFileIO\DgnFileIOApi.h>

extern "C" DLLEXPORT void MdlMain(int argc, WCharCP argv[])
{
             HWND hWnd = NULL;
             hWnd = (HWND)mdlNativeWindow_getMainHandle(0);


            return;

}

I can't able to resolve these build errors.

Parents Reply
  • Hi Rajesh,

    No, I am still facing this issue. 

    it's because you do not follow my and Bob's advises.

    • Me (general advice): What MicroStation libraries do you link?
    • Bob (specific advice): Bmake Compile errors.  Do you have nativewindow.lib in your LINKER_LIBRARIES list in your project mke file?
    Is there anything library need to include??

    It's C++ rule that for every function or class used, you have to ensure proper library will be linked. So when you use mdlNativeWindow_getMainHandle(), you have to link the proper library. And Bob already told you it's nativewindow.lib, but I do not see this library in your makefile.

    You do not share output from bmake process (not what Visual Studio shows you, but what bmake reports when started manually). Maybe you even do not try to understand what compiler and linker tell you? I can guess only, but I assume the linker complains in this way (output for another project and another missing lib):

    ElementsExampleQueryTool.obj : error LNK2001: unresolved external symbol 
    "protected: virtual void __cdecl Bentley::DgnPlatform::DgnElementSetTool::_ModifyAgendaEntries(void)"
    (?_ModifyAgendaEntries@DgnElementSetTool@DgnPlatform@Bentley@@MEAAXXZ)

    which tells exactly error id (so can be searched in this forum and on Internet) and also what class or method cannot be linked (so documentation can be consulted, or when the information is not found, tools like dllexp or dumpbin can be used to find the right library).

    but still i am stuck.

    I think the main problem that is that without proper C++ development skills (and C++ is known as not only complicated language, but also language with very complex requirement for build process) you try to start with MicroStation app development (which adds extra levels of complexity on top of C++), where to know all details how C++ works is mandatory.

    It's like to learn how to drive car after injury and surgery, without finished convalescence and physiotherapy, trying to learn traffic rules and legal context during driving, not before. Ignoring the process "one step after another" never leads do good and efficient results.

    My code is as follows:

    Now I have noticed ... did you think about your code?

    I have no idea what will happen, I do not think you will receive any valid handle before you switch MicroStation to graphics mode. Is there any "main windows" when MicroStation is not in graphics mode?

    Regards,

      Jan

Children
No Data