Во-первых, не допускается смешение библиотек из разных наборов!
gisu*.dll - это библиотеки GIS ToolKit 12 x32
gisu64*.dll - это библиотека GIS ToolKit 12 x64
gis*.dll - это библиотеки GIS ToolKit 11 (gisacces.dll и пр.)
Если Вы используете GIS ToolKit Active, то он базируется на наборе библиотек GIS ToolKit 11 и позволяет создавать только x32 приложения.
Соответственно, вызов API из других библиотек (не GIS ToolKit 11) будет приводить к ошибке в лучшем случае, а как правило к Access Violation.
То есть вызов mapPortalMenu должен быть из gisacces.dll.
Во-вторых, для вызова mapPortalMenu необходимо заполнить структуру TASKPARMEX, где указывается HWND формы, вызывающей диалог, и HWND оконного элемента карты.
Вот пример из документации (не C#, правда):
Код |
---|
Пример использования функции mapPortalMenu, если идентификатор данных
HMAP равен 0:
AnsiString IniName = "C:\\Panorama11\\panorama.ini";
AnsiString HelpName = "C:\\Panorama11\\panorama.chm";
TTASKPARMEX parm = {0};
char wmsstring[4096] = {0};
parm.Language = cML_RUSSIAN;
parm.Handle = MapView1->Handle;
parm.IniName = IniName.c_str();
parm.HelpName = HelpName.c_str();
parm.PathShell = AnsiString(ExtractFilePath(Application->ExeName)).c_str();
parm.Handle = Application->Handle;
parm.DocHandle = MapView1->Handle;
SetMapAccessLanguage(cML_RUSSIAN);
int left = Form1->Left;
int top = Form1->Top;
HMAP hm = 0;
hm = mapPortalMenu(hm, &parm, left, top);
if(hm == 0)
return 0;
int count = mapGetWMSCount(hm);
MapView1->Rendering = false;
for(int ii = 1; ii <= count; ii++)
{
char* name = mapGetWMSName(hm, ii);
if(ii == 1)
{
int ret = MapView1->MapOpen(name, 1);
if(ret == 0)
ShowMessage("Error");
}
else
{
MapView1->AppendData(name, 1);
}
}
mapCloseData(hm);
MapView1->Rendering = true;
TDOUBLEPOINT point = {56./180.*M_PI,38./180.*M_PI};
MapView1->SetCenter(point, PP_GEO);
Пример использования функции mapPortalMenu, если идентификатор данных
HMAP не равен 0:
AnsiString IniName = "C:\\Panorama11\\panorama.ini";
AnsiString HelpName = "C:\\Panorama11\\panorama.chm";
TTASKPARMEX parm = {0};
char wmsstring[4096] = {0};
parm.Language = cML_RUSSIAN;
parm.Handle = MapView1->Handle;
parm.IniName = IniName.c_str();
parm.HelpName = HelpName.c_str();
parm.PathShell = AnsiString(ExtractFilePath(Application->ExeName)).c_str();
parm.Handle = Application->Handle;
parm.DocHandle = MapView1->Handle;
SetMapAccessLanguage(cML_RUSSIAN);
int left = Form1->Left;
int top = Form1->Top;
HMAP hm = MapView1->MapHandle;
hm = mapPortalMenu(hm, &parm, left, top);
MapView1->UpdatePictureBorder();
TDOUBLEPOINT point = {56./180.*M_PI,38./180.*M_PI};
MapView1->SetCenter(point, PP_GEO);
MapView1->Repaint();
|