整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          SuperMap iObjects .NET加載dl

          SuperMap iObjects .NET加載dll動(dòng)態(tài)庫失敗,控件不能用問題解析

          次部署使用SuperMap iObjects .NET的開發(fā)人員,可能遇到以下問題:

          1.環(huán)境部署不成功

          2.部署成功了,VS工具箱里面沒有SuperMap相關(guān)控件

          3.工具箱里面的SuperMap相關(guān)控件拖到界面上報(bào)錯(cuò)

          4.運(yùn)行程序,報(bào)錯(cuò)未能加載文件或程序集

          下面我們將對上述問題來使用“套路”一一解決。

          大前提: 很多用戶喜歡在工具箱里面拖控件使用,可視化的管理控件的屬性,但遇到了上面所述
          的問題不知道如何解決,這里我們先說一個(gè)“大前提”,要想使用工具箱里面的控件,無論你的計(jì)
          算機(jī)操作系統(tǒng)是32位的還是64位的,只能部署SuperMap iObjects .NET 32位的開發(fā)環(huán)境(VS的
          限制,超圖也很無奈啊),這樣才能注冊工具箱。當(dāng)然,不需要通過拖控件,習(xí)慣new控件來使用
          的用戶,你的計(jì)算機(jī)操作系統(tǒng)是32位的就安裝32位的SuperMap iObjects .NET,你的計(jì)算機(jī)操作
          系統(tǒng)是64位的,那么部署SuperMap iObjects .NET 32位還是64位的運(yùn)行環(huán)境就任君選擇了。

          一.環(huán)境部署不成功

          使用Install_x86.bat/Install_x64.bat 文件來完全部署的用戶,如果部署過程中出現(xiàn)問題,解決的套路很簡單。

          1.關(guān)閉所有殺毒軟件(最好連防火墻都關(guān)了)

          2.關(guān)閉VS(可能會(huì)涉及到安裝Microsoft .NET Framework 4.0)

          3.以管理員身份運(yùn)行Install_x86.bat/Install_x64.bat 文件

          自定義部署不成功的用戶,上面的套路照樣可用,但通常出現(xiàn)問題是在注冊工具箱的時(shí)候,我們在“大前提”里面說過,要使用工具箱來拖控件,就只能部署SuperMap iObjects .NET 32位的運(yùn)行環(huán)境!所以注冊工具箱的環(huán)境,要是32位的。當(dāng)然,不需要注冊工具箱的用戶,這一點(diǎn)就可以不用關(guān)注。

          二.部署成功了,VS工具箱里面沒有控件

          1.工具箱右鍵---->添加選項(xiàng)卡


          2.右鍵新建的選項(xiàng)卡------>選擇項(xiàng)

          3.在新打開的頁面中選擇.NET Framework組件,點(diǎn)擊瀏覽,找到SuperMap iObjects .NET 目錄下32位bin包(x86)的SuperMap.UI.Controls.dll,SuperMap.Mapping.dll,SuperMap.Layout.dll,SuperMap.Realspace.dll,SuperMap.Data.dll,添加后點(diǎn)擊確定。

          4.此時(shí)看看我們的工具箱,是不是就有了相關(guān)控件了

          三.工具箱里面的控件拖到界面上報(bào)錯(cuò)

          這個(gè)問題的解決辦法是把SuperMap iObjects .NET 目錄下32位的Bin包路徑加在環(huán)境變量中
          具體操作如下:
          1.打開計(jì)算機(jī)

          2.點(diǎn)擊系統(tǒng)屬性

          3.點(diǎn)擊高級系統(tǒng)設(shè)置

          4.點(diǎn)擊環(huán)境變量

          5.雙擊系統(tǒng)變量中的path變量

          6.然后找到SuperMap iObjects .NET組件目錄下的32位bin包路徑,加在系統(tǒng)環(huán)境變量path中(沒有的話就新建一個(gè)path)

          瞬間搞定問題

          四.運(yùn)行程序,報(bào)錯(cuò)未能加載文件或程序集

          上面這種錯(cuò)誤,解決辦法如下:

          1.把你引用的dll文件所在bin包目錄添加到環(huán)境變量中,具體方法上面已經(jīng)說過了。

          2.確認(rèn)你的許可是否有你所用到的功能模塊,一般試用許可會(huì)包含所有的功能模塊,而正式許可不一定包含全部的功能模塊,具體檢查方法如下:

          (1)打開許可中心

          (2)在許可狀態(tài)中查看有哪些模塊以及許可是否已經(jīng)過期

          3.如果使用的場景的功能,計(jì)算機(jī)顯卡不支持的話,也會(huì)拋出這個(gè)異常。一個(gè)簡單的檢驗(yàn)辦法就是打開桌面軟件(SuperMap iDesktop),看三維功能是否能正常使用。

          還有一種運(yùn)行程序比較常見的錯(cuò)誤是:未能加載文件或程序集 ‘SuperMap. Version=***’ 或者它的某一個(gè)依賴項(xiàng)。試圖加載格式不正確的程序’

          解決辦法如下:

          第一,保證編譯目標(biāo)平臺(tái)位數(shù)和引用的dll文件動(dòng)態(tài)庫位數(shù)保持一致
          具體操作:

          1.選中工程,右鍵選擇屬性

          2.選擇一致的目標(biāo)平臺(tái)

          第二,環(huán)境變量中只有一個(gè)組件bin路徑,且與引用動(dòng)態(tài)庫路徑保持一致,具體的查看和修改方法上面已經(jīng)說過,這里不再贅述。

          第三,把工程的工作目錄和引用路徑設(shè)置為引用動(dòng)態(tài)庫路徑,這一點(diǎn)可以用來檢測出現(xiàn)的問題是否跟環(huán)境變量有關(guān)。設(shè)置好了之后,程序能夠運(yùn)行起來,說明問題就出在環(huán)境變量上,還是不能運(yùn)行起來的話,就不用糾結(jié)環(huán)境變量了,問題不在這上面,得找找其它原因。

          第四,選擇合適的.NET Framework框架,SuperMap iObjects .NET 6R版本,得選擇.NET Framework 3.5及以下,SuperMap iObjects .NET 7C,8C版本,得選擇.NET Framework 4.0及以上。

          以上就是解決此類問題的“套路”,有了這些“套路”,此類問題就可以對癥下藥,迎刃而解了。

          果以上方法都解決不了你的問題,看看以下網(wǎng)友給出的解決辦法: 修改筆記本鍵盤的驅(qū)動(dòng):通過“我的電腦”打開系統(tǒng)屬性,選擇硬件標(biāo)簽:打開設(shè)備管理器,我們發(fā)現(xiàn)中文Windows XP操作系統(tǒng)下,默認(rèn)的鍵盤驅(qū)動(dòng)是“標(biāo)準(zhǔn)101/102鍵或Microsoft自然PS/2鍵盤”。 1. 右鍵點(diǎn)擊選擇更新驅(qū)動(dòng)程序,會(huì)出現(xiàn)硬件更新向?qū)В哼x擇“從列表或指定位置安裝(高級)”,單擊“下一步”,選擇“不要搜索。我要自己選擇要安裝的驅(qū)動(dòng)程序。” 單擊“下一步”,進(jìn)入“選擇要為此硬件安裝的設(shè)備驅(qū)動(dòng)程序”頁去掉復(fù)選框“顯示兼容硬件”前的小勾。在“標(biāo)準(zhǔn)鍵盤型號(hào)”欄中選擇“Japanese PS/2 Keyboard (106/109 Key)”,單擊“下一步”,彈出“更新驅(qū)動(dòng)程序警告”,點(diǎn)“是”。“確認(rèn)設(shè)備安裝”窗口繼續(xù)點(diǎn)“是”。 2. 完成硬件更新向?qū)АV匦聠?dòng)計(jì)算機(jī)。 修改注冊表:單擊“開始”菜單,點(diǎn)“運(yùn)行”,輸入“regedit”,打開注冊表,進(jìn)入“HKEY_LOCAL_MACHINE\ SYSTEM\ControlSet001\Control\Keyboard Layouts”,里面有很多子項(xiàng),通過觀察我發(fā)現(xiàn),以“0804”結(jié)尾的都是簡體中文輸入法。打開“E00E0804”,可以看到右側(cè)子項(xiàng)里有“Layout File”子項(xiàng),雙擊打開該項(xiàng),將“數(shù)值數(shù)據(jù)”中的“kbdus.dll”改為“kbdjpn.dll”,“確定”即可。依此類推,可以將所有的以“0804”結(jié)尾的子項(xiàng)中“Layout File”全部改為“kbdjpn.dll”,具體就根據(jù)自己常用的輸入法進(jìn)行選擇了。然后重新啟動(dòng)計(jì)算機(jī)就好了! 造成筆記本電腦鍵盤失靈的原因非常多,比較常見的就是最開始為大家介紹的那兩種,另外有些電腦病毒也會(huì)破壞電腦按鍵,建議大家遇到筆記本電腦鍵盤按鍵失靈先對電腦進(jìn)行殺毒看看,然后在再使用以上方法解決問題。


          Qt 中,可以在 DLL 中創(chuàng)建和顯示窗口。

          首先,在 DLL 項(xiàng)目中需要添加如下的頭文件和代碼:

          #include <QWidget>
          #include <QVBoxLayout>
          
          class MyWidget : public QWidget
          {
          public:
              MyWidget(QWidget* parent=nullptr)
                  : QWidget(parent)
              {
                  QVBoxLayout* layout=new QVBoxLayout(this);
                  QLabel* label=new QLabel("Hello from DLL", this);
                  layout->addWidget(label);
              }
          };

          上述代碼定義了一個(gè)名為 MyWidget 的 QWidget 子類,并在構(gòu)造函數(shù)中添加了一個(gè)垂直布局和一個(gè)標(biāo)簽。

          然后,在 DLL 中需要添加一個(gè)新的導(dǎo)出函數(shù),用于創(chuàng)建和顯示窗口。該函數(shù)的實(shí)現(xiàn)如下:

          #include "MyWidget.h"
          
          void __declspec(dllexport) createAndShowWindow()
          {
              QApplication app(__argc, __argv);
              MyWidget* widget=new MyWidget();
              widget->show();
              app.exec();
          }

          上述代碼創(chuàng)建了一個(gè) QApplication 對象,創(chuàng)建了一個(gè) MyWidget 對象,并調(diào)用 show() 方法來顯示窗口。最后調(diào)用 exec() 方法進(jìn)入事件循環(huán)。

          在主程序中,可以使用 QLibrary 類來加載 DLL 并調(diào)用導(dǎo)出函數(shù)。代碼示例如下:

          QLibrary lib("mydll.dll");
          if (lib.load())
          {
              typedef void (*Func)();
              Func createAndShowWindow=reinterpret_cast<Func>(lib.resolve("createAndShowWindow"));
              if (createAndShowWindow)
              {
                  createAndShowWindow();
              }
              else
              {
                  qDebug() << "Failed to resolve function";
              }
              lib.unload();
          }
          else
          {
              qDebug() << "Failed to load DLL";
          }

          上述代碼使用 QLibrary 類加載 DLL,然后通過 resolve() 方法獲取導(dǎo)出函數(shù)的地址,并轉(zhuǎn)換為函數(shù)指針類型。最后調(diào)用該函數(shù)即可顯示窗口。

          需要注意的是,在主程序中使用 QLibrary 加載 DLL 時(shí),需要確保 DLL 文件的路徑正確,并且 DLL 文件和主程序的架構(gòu)一致(如都為 x64 或 x86)。

          另外,因?yàn)樵?DLL 中創(chuàng)建了 QApplication 對象,因此需要確保主程序中沒有創(chuàng)建過 QApplication 對象,否則會(huì)發(fā)生錯(cuò)誤。可以將主程序中的 QApplication 對象創(chuàng)建部分放置到 DLL 中的導(dǎo)出函數(shù)中。


          主站蜘蛛池模板: 免费在线观看一区| 中文精品一区二区三区四区| 鲁丝片一区二区三区免费| 好湿好大硬得深一点动态图91精品福利一区二区| 亚洲AV无码一区二区三区在线| 亚洲日本va午夜中文字幕一区| 日韩免费视频一区二区| 亚洲av一综合av一区| 久久精品动漫一区二区三区| 亚洲国产一区二区三区青草影视 | 国产女人乱人伦精品一区二区| 精品国产福利在线观看一区| 日韩在线一区二区三区视频| 日美欧韩一区二去三区| 精品乱人伦一区二区| 亚洲国产综合精品一区在线播放| 一区二区三区中文| 国内精品无码一区二区三区| 久久精品国产一区二区三区肥胖 | 美女视频一区三区网站在线观看| 天堂va在线高清一区| 精品国产亚洲一区二区三区在线观看| 日韩AV片无码一区二区不卡 | 精品国产一区二区三区久久| 少妇精品无码一区二区三区| 精品无码一区二区三区在线| 国内精品视频一区二区三区| 日韩经典精品无码一区| 国模无码一区二区三区不卡| 人妻体体内射精一区二区| 亚洲国产欧美日韩精品一区二区三区 | 丰满爆乳一区二区三区| 久久无码人妻一区二区三区午夜| 国产成人精品第一区二区| 日本一区二区三区四区视频| 日本道免费精品一区二区| 亚洲国产美女福利直播秀一区二区| 亚无码乱人伦一区二区| 一区二区精品在线观看| 久久精品一区二区三区四区| 麻豆AV天堂一区二区香蕉|