做?個?德地圖的 iOS / Android MAUI 控件(上)

點擊上方藍字

關注我們

(本文閱讀時間:10分鐘)

Microsoft Build 2022 ?會上正式發布了 .NET MAUI , 對于 .NET 開發者可以? C# 完成跨平臺的前端應?開發。對?起 MAUI 的前身 Xamarin , MAUI 除了可以?傳統的原?開發模式外,還?持了 Blazor 的混合式開發。這也讓更多?向的開發?員能進?到跨平臺的應?開發中來。有?會提出云原?時代,前端開發還重要嗎 ?實際上,多端應?兼容是云原?不可缺少的??。互聯?時代,有很多出?的應?,并發布了針對第三?應?的 SDK,開發者可以結合這些 SDK 做相關的解決?案。通過 MAUI 能調?這些 SDK 嗎?我會通過系列?章去和?家介紹。

03a8d2d259e8dd91a0dfc99535976553.png

為何要綁定原? SDK

我們知道?個應?可以融?不同的場景,例如?個打?應?就需要地圖,例如?個拍照應?就需要社交,例如?個如果你是傳統的物聯?應?你需要?個藍?的通信協議。拿來主義就是?個節省的?式,可以結合第三?提供的 SDK 來完成應?的開發。對于 .NET 開發?員會是?個難點,因為習慣性地去調? DLL ,但在iOS / Android 原?開發上,實際上是有不同的庫調?機制。在 Xamarin 時代,就有不少開發者去? C# 綁定第三?的庫,例如在中國市場就有?付寶,微信,?德地圖等。到了 MAUI 有什么不?樣呢?在?致上是和Xamarin 綁定?式?樣。但由于 MAUI 融?到了 .NET 6,實際上就是?個項??件格式的改變。現階段你可以通過命令?的?式快速構建 iOS / Android 的綁定項?。

▌MAUI iOS 庫的綁定

dotnet new iosbinding -o iOS.AMapSDK.Binding

要做 iOS / macOS的綁定你除了創建綁定項?外,你還需要安裝 Shapie ?具 (https://aka.ms/objectivesharpie)做對應轉換, 可以通過命令?去針對 iOS 的動態庫和靜態庫做對應轉換。這?補充?點你的 Xcode環境是必須要安裝的。下?是?個簡單的轉換語句,更多具體?家可以關注我的該系列的 iOS 庫?件綁定?章。

sharpie bind -framework /your path/AMapFoundationKit.framework -sdk
iphoneos15.5

▌MAUI Android 庫的綁定

dotnet new android-bindinglib -o Droid.AMapSDK.Binding

Android 的綁定和 iOS 不?樣,直接把第三?庫 Android SDK 的 jar 或者 aar 包放進去編譯即可。

2044338b167c0ee0ea804425fe3ba9d9.png

如果你希望了解更多可以關注本系列 Android 庫綁定的系列?章。

控件定制

在 Xamarin.Forms 中,通過渲染器機制對跨平臺各?控件的引?,并且依賴于 INotifyPropertyChanged 。.NET MAUI 沒取消了渲染器機制,?是引?了?種稱為 Handler 的模式。有了 Handlers 更靈活 ,?且在需要時更容易擴展或覆蓋。

這是 MAUI 全新的 Handler 模式

d2884621dfce92be52dd4c99b092a1fc.png

我們通過 Handler 機制可以構建好?德地圖的 MAUI 控件

70a522effa3599b53d6ffcc5fbffa6ec.png

你可以通過 https://github.com/kinfey/AMapMAUIControls 使?體驗 MAUI 的?德 Android / iOS 控件

3b7abf45a5d6623cf277bbff451e03c9.png

5c26f4dc57771aba19484e6838e5e5ed.gif

介紹了?些做?德地圖的 iOS / Android MAUI 控件的主要知識之后,接下來將重點介紹 iOS 原?庫綁定的知識, 并告訴?家在綁定原?庫過程的?些技巧,希望給到?伙伴?些啟發。

認識 iOS 動態庫和靜態庫

在綁定之前,我們需要學習?下 iOS 的動態庫和靜態庫。最簡單理解的?式是在 iOS 中靜態庫是以 .a 后綴結尾,動態庫是以 .dylib 后綴結尾。?論靜態庫和動態庫都可以打包成 Framework 。

▌靜態庫和動態庫的區別

  1. 靜態庫的特點是編譯時會把庫?件直接拷??份到?標應?程序,?這個拷?是駐留在?標應?程序??的,所以編譯完成后,靜態庫的?件就沒有?了。但有個缺點就是,因為需要拷?,所以?成的應?程序的容量會較?。

  2. 動態庫和靜態庫剛好是相反,編譯的時候是不會拷?到?標應?程序??的,所以?成應?程序的體積較?,?且?個動態庫可以共享給多個應?程序使?。但?成應?程序是依賴于動態庫,這也導致經常會出現動態庫找不到的情況。

我們來拆解?下?德地圖基礎的 SDK - AMapFoundationKit.framework

14868afd29f7db55bc53f891dd78d4e0.png

這?就包含了對應的頭?件信息,模塊信息,以及靜態庫。你可以清晰看到?德地圖打包成 Framrwork 的實現。這也是我們對庫概念的認識,編譯好的?進制代碼,向外暴露頭?件給第三?開發者使?。

通過 Sharpie ?具?成 C# 調?的接??

Shapie 是?個?常好?的轉換?具,它?持在 macOS 下對 Objective-C 的庫的轉。通過 Sharpie 可以對庫?件給出的頭?件進?轉換完成 C# 的綁定。在 MAUI 前身 Shapie ?具就已經存在 , 我經常就利?這個?具做轉換。

因為這次?德地圖的功能我?到 3D ,所以我會對?德的 AMapFoundationKit.Framework 和MAMapKit.framework 兩個 Framework 進?綁定轉換。

轉換 AMapFoundationKit.Framework

sharpie bind -framework AMapFoundationKit.framework -sdk iphoneos15.5

轉換 MAMapKit.framework

sharpie bind -framework MAMapKit.framework -sdk iphoneos15.5

補充:MAMapKit.framework 依賴于 AMapFoundationKit.framework ,所以要放在?個相同的?錄下。

這??要注意,你需要安裝好 Xcode ,建議安裝到最新 ,并對應最新的 iOS SDK , 當然你也可以根據需要綁定不同版本的 iOS SDK , 你可以通過?次是命令查看環境

sharpie xcode -sdks

通過命令?綁定?成的是兩個?件是 StructsAndEnums.cs 和 ApiDefinitions.cs ,StructsAndEnums.cs 對應的是?些常量和枚舉類型,ApiDefinitions.cs 對應的是?些接?和?法 。

創建 MAUI 的 iOS 綁定項?

這?創建需要注意,現在 Visual Studio 2022 的模版都沒有完成,現在?家?命令?創建,因為我們有兩個項?,需要創建兩個 Binding 的項?分別是針對于 AMapFoundationKit.Framework 的項?構建

dotnet new iosbinding -o iOS.AMap.Foundation

針對于 MAMapKit.framework 的項?構建

dotnet new iosbinding -o iOS.AMap.3D

?成好后,需要把 AMapFoundationKit.framework 放到 iOS.AMap.Foundation 的?錄下,MAMapKit.framework 放到 iOS.AMap.3D ?錄下。并把?成的 StructsAndEnums.cs 和 ApiDefinitions.cs 放到對應?錄。

2d5ec26c7d876752222cb97ca7df032a.png

項?設置調整

1. 在 Sharpie ?成的?錄下 StructsAndEnum.cs ,?在構建的 Binding ?錄下是 ApiDefinition.cs , 要把它替換掉。所以要對 .csproj 項?進?修改

<ItemGroup><ObjcBindingApiDefinition Include="ApiDefinitions.cs" /><ObjcBindingCoreSource Include="StructsAndEnums.cs" />
</ItemGroup>

2. 對 iOS.AMap.Foundation 進?編譯

在 AMapFoundationKit.framework.csproj 增加對 Framework 的引?

<ItemGroup><NativeReference Include="AMapFoundationKit.framework"><Kind>Framework</Kind><ForceLoad>True</ForceLoad><SmartLink>False</SmartLink></NativeReference></ItemGroup>

Kind :原?綁定類型可以是 Framwork 也可以是 StaticLibary

ForceLoad :強加載,選擇 True

SmartLink :智能鏈接

完成的項?.csproj 設置為

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net6.0-ios</TargetFramework><Nullable>enable</Nullable><ImplicitUsings>true</ImplicitUsings><IsBindingProject>true</IsBindingProject>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<NoBindingEmbedding>false</NoBindingEmbedding></PropertyGroup><ItemGroup><ObjcBindingApiDefinition Include="ApiDefinitions.cs" /><ObjcBindingCoreSource Include="StructsAndEnums.cs" /></ItemGroup><ItemGroup><NativeReference Include="AMapFoundationKit.framework"><Kind>Framework</Kind><ForceLoad>True</ForceLoad><SmartLink>False</SmartLink></NativeReference></ItemGroup>
</Project>

編譯 iOS.AMap.Foundation , 你會覺得奔潰,因為?常多的出錯信息。這是因為 Shapie 做轉換時,?些轉換沒做好導致的,這個時候你就需要?個?個進?調整

1aa9808ce514e40c6ed8aaebf9f23ca7.png

歸類?下出錯信息

  • The type or namespace name 'VerifyAttribute' could not be found

這類信息時因為轉換時候沒有確認好屬性,所以會增加 VerifyAttribute 字段,這個?般情況下把這個字段注釋掉就可以了,如

static class CFunctions
{
// NSString * AMapEmptyStringIfNil (NSString *s);
[DllImport ("__Internal")]
// [Verify (PlatformInvoke)]
static extern NSString AMapEmptyStringIfNil (NSString s);
// extern CLLocationCoordinate2D AMapCoordinateConvert
(CLLocationCoordinate2D coordinate, AMapCoordinateType type);
[DllImport ("__Internal")]
// [Verify (PlatformInvoke)]
static extern CLLocationCoordinate2D AMapCoordinateConvert
(CLLocationCoordinate2D coordinate, AMapCoordinateType type);
// extern BOOL AMapDataAvailableForCoordinate (CLLocationCoordinate2D
coordinate);
[DllImport ("__Internal")]
// [Verify (PlatformInvoke)]
static extern bool AMapDataAvailableForCoordinate
(CLLocationCoordinate2D coordinate);
}
  • The type or namespace name 'AMapFoundationKit'

命名空間問題,這個你需要為 StructsAndEnums.cs 和 ApiDefinitions.cs 增加命名控件就可以了,你可以直接? AMapFoundationKit ,也可以??修改喜歡的名字 ,我這?? iOS.AMap.Foundation 名字和項?對應

  • Duplicate 'Static' attribute

這個是因為 ApiDefinitions.cs 的 Constants 重復定義了,這個就需要重新整理歸并為?個就可以了

  • Unsupported type for Fields: bool for 'iOS.AMap.Foundation.Constants _amapLocationOverseas'.e

類型不對應導致編譯不通過,這個時候我修改為

[Field ("_amapLocationOverseas", "__Internal")]
IntPtr _amapLocationOverseas { get; }

這樣你就可以編譯通過 iOS.AMap.Foundation

3. 對 iOS.AMap.3D 進?編譯

添加對 iOS.AMap.Foundation的引?

因為 MAMapKit.framework 依賴于 AMapFoundationKit.framework , 所以 iOS.AMap.3D 是依賴于iOS.AMap.Foundation

<ItemGroup><ProjectReference
Include="..\iOS.Amap.Foundation\iOS.Amap.Foundation.csproj" /></ItemGroup>

引? MAMapKit.framework

<ItemGroup><NativeReference Include="MAMapKit.framework"><Kind>Framework</Kind><ForceLoad>True</ForceLoad><SmartLink>True</SmartLink><Frameworks>GLKit OpenGLES UIKit Foundation CoreGraphics QuartzCore
CoreLocation CoreTelephony SystemConfiguration Security AdSupport
JavaScriptCore</Frameworks><LinkerFlags>-lz -lstdc++ -lc++</LinkerFlags></NativeReference></ItemGroup>

這個和 AMapFoundationKit.framework 不?樣的, 需要添加 Framework 編譯時需要依賴的項, 以及?到的編譯?式 ,這個和你綁定的 framework 有關, 我這?選擇?德地圖,所以按照它們的?檔要求做了相關設置。

完成的項?.csproj 設置為

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><TargetFramework>net6.0-ios</TargetFramework><RootNamespace>iOS.Amap._3D</RootNamespace><Nullable>enable</Nullable><ImplicitUsings>true</ImplicitUsings><IsBindingProject>true</IsBindingProject>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<NoBindingEmbedding>false</NoBindingEmbedding></PropertyGroup><ItemGroup><ObjcBindingApiDefinition Include="ApiDefinitions.cs" /><ObjcBindingCoreSource Include="StructsAndEnums.cs" /></ItemGroup><ItemGroup><NativeReference Include="MAMapKit.framework"><Kind>Framework</Kind><ForceLoad>True</ForceLoad><SmartLink>True</SmartLink><Frameworks>GLKit OpenGLES UIKit Foundation CoreGraphics QuartzCore
CoreLocation CoreTelephony SystemConfiguration Security AdSupport
JavaScriptCore</Frameworks><LinkerFlags>-lz -lstdc++ -lc++</LinkerFlags></NativeReference></ItemGroup><ItemGroup><ProjectReference
Include="..\iOS.Amap.Foundation\iOS.Amap.Foundation.csproj" /></ItemGroup>
</Project>

編譯 iOS.AMap.3D,你會?之前更奔潰,這個時候你需要有?夠的耐?, 除了和之前差不多的出錯信息外,還有?些新的狀況,我這?列舉?下

  • Type 'MAMapViewDelegate' already defines a member called 'MapView' with the same parameter?types

造成這個原因是因為?法重名了,這也是 Objective-C 聲明式語法和傳統語法不?樣的地?,所以你要針對這個做重命名

如這個

// @optional -(void)mapView:(MAMapView *)mapView didAnnotationViewTapped:
(MAAnnotationView *)view;
[Export ("mapView:didAnnotationViewTapped:")]
void MapView (MAMapView mapView, MAAnnotationView view);

修改為

// @optional -(void)mapView:(MAMapView *)mapView didAnnotationViewTapped:
(MAAnnotationView *)view;
[Export ("mapView:didAnnotationViewTapped:")]
void MapViewDidAnnotationViewTapped (MAMapView mapView, MAAnnotationView
view);
  • The type or namespace name 'IMAOverlay' could not be found

這個是命名出錯,在 ApiDefinitions.cs ?件中你可以找到 MAOverlay

[Protocol]
interface MAOverlay : IMAAnnotation
{
// @required -(CLLocationCoordinate2D)coordinate;
[Abstract]
[Export ("coordinate")]
// [Verify (MethodToProperty)]
CLLocationCoordinate2D Coordinate { get; }
// @required -(MAMapRect)boundingMapRect;
[Abstract]
[Export ("boundingMapRect")]
// [Verify (MethodToProperty)]
MAMapRect BoundingMapRect { get; }
}

所以把所有 IMAOverlay 替換為 MAOverlay 即可。

  • The type or namespace name 'AutoGeneratedName' could not be found

把 AutoGeneratedName 取消

  • Constant value '-1' cannot be converted to a 'ulong'

指定類型錯誤 AllCorners = ~0x0 改為 AllCorners = 0x0

Do not know how to make a signature for CoreLocation.CLLocationCoordinate2D in parameter`coordinates'

C# 是沒有指針的,在 Sharpie 轉換時出錯了

  • 'MAMapView_UserLocation.HeadingFilter': cannot declare instance members in a static class

// @property (nonatomic) CLLocationDegrees headingFilter;
[Export ("headingFilter")]
double HeadingFilter( { get; set; })

這個定義要換成

// @property (nonatomic) CLLocationDegrees headingFilter;
[Export ("headingFilter")]
double HeadingFilter();
  • Cannot convert type 'Foundation.NSObject' to 'nint'

// @property (nonatomic, weak) id<MAOverlayRenderDelegate>
rendererDelegate;
[NullAllowed, Export ("rendererDelegate", ArgumentSemantic.Weak)]
NSObject WeakRendererDelegate { get; set; }

修改為

// @property (nonatomic, weak) id<MAOverlayRenderDelegate>
rendererDelegate;
[NullAllowed, Export ("rendererDelegate", ArgumentSemantic.Weak)]
IntPtr WeakRendererDelegate { get; set; }

或者排除是?個漫?的過程,但編譯成功?刻你會?常興奮,這樣我們就把 AMapFoundationKit.framework和 MAMapKit.framework 綁定成功了。

嘗試創建?個 .NET for iOS 項?驗證?下

5ed4762ecbaea6a97d4c75d49184e446.png

  • 具體實現請到我的 GitHub Repo 下載 :

    https://github.com/kinfey/AMapMAUIControls/tree/main/Samples/iOS.Bindings/AMap.iOS.Demo

小結

原?庫綁定雖然?較多繁瑣的事情,但是實際上也是?分治愈的,當你看到編譯通過的那?刻,你就會明?個中的快樂。還有?點,很多?認為跨平臺移動開發不需要平臺的基礎知識了,實際還是需要。特別在這種原?庫的綁定上,就需要你既會 C# ?會 Objective-C 。希望該例?能給各位有所啟發。請?家期待下?篇 Android 原生庫綁定

相關資源

  • 通過 Microsoft Docs 了解 MAUI :

    https://aka.ms/Docs.MAUI

  • 通過 Microsoft Learn 學習 MAUI :

    https://aka.ms/Learn.MAUI

  • 通過 Microsoft Docs 了解 :

    MAUI https://aka.ms/Docs.MAUI

  • 通過 Microsoft Learn 學習 MAUI:

    https://aka.ms/Learn.MAUI

  • 使??德地圖 SDK for iOS 請訪問:

    https://developer.amap.com/api/ios-sdk/gettingstarted

  • 了解 iOS 原?庫綁定的內容,請訪問 :

    https://docs.microsoft.com/zh-cn/xamarin/cross-platform/macios/binding/?context=xamarin%2Fios

0d24c586e8fe102d5d50e7267b55a928.png

謝謝你讀完了本文~相信你一定有一些感想、觀點、問題想要表達。歡迎在評論區暢所欲言,期待聽到你的“聲音”哦!

同時,喜歡的內容也不要忘記轉發給你的小伙伴們,謝謝你的支持!

22e0e0a995cd30d23207d56642584f52.jpeg

長按識別二維碼

關注微軟中國MSDN

37f617614ef3f253f06ab5cd6002154f.gif

點擊「閱讀原文」了解MAUI~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284933.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284933.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284933.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

易康eCognition Developer 9.01安裝教程(附eCognition下載地址及中文教程)

eCognition是由德國Definiens Imaging公司2009年推出的智能化影像分析軟件,2010年被美國Trimble公司收購。eCognition是目前所有商用遙感軟件中第一個基于目標信息的遙感信息提取軟件,它采用決策專家系統支持的模糊分類算法,突破了傳統商業遙感軟件單純基于光譜信息進行影像…

[改善Java代碼]不要覆寫靜態方法

建議33&#xff1a; 不要覆寫靜態方法 我們知道在Java中可以通過覆寫&#xff08;Override&#xff09;來增強或減弱父類的方法和行為&#xff0c;但覆寫是針對非靜態方法&#xff08;也叫做實例方法&#xff0c;只有生成實例才能調用的方法&#xff09;的&#xff0c;不能針對…

C語言試題194之實現strcpy函數功能

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款刷算法、筆試、面經、拿大公司offer神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現st…

ArcGIS實驗教程——實驗四十三:ArcGIS柵格重分類(Reclass)案例詳解

文章目錄 一、重分類1. 新值替代2. 將值組合到一起3. 按相同等級對一組柵格的值進行重分類4. 將特定值設置為NoData 或者為 NoData像元設置某個值二、查找表三、分割四、使用表重分類五、使用ASCI文件重分類重分類就是對原有柵格像元值重新分類從而得到一組新值并輸出。重分類工…

[中文版] 可視化 CSS References 文檔

本文分享了我將可視化 CSS References 文檔翻譯成中文版的介紹&#xff0c;翻譯工作還在陸續進行中&#xff0c;供學習 CSS 參考。 1. 可視化 CSS References 文檔介紹 許多 CSS 的文檔都是屬性的介紹&#xff0c;而開源項目 css-reference 并沒有提供中文版&#xff0c;而當我…

對比 C# 聊聊 C++ 中幾類特殊成員函數

一&#xff1a;背景 在 C# 中要說類默認給我們定義的特殊成員函數&#xff0c;莫過于 構造函數&#xff0c;但在 C 中這樣的特殊函數高達 6 種&#xff0c;有必要整合一下聊一聊。二&#xff1a;特殊成員函數 1. 默認構造函數和 C# 一樣&#xff0c;很多書中都說&#xff0c;如…

Js 枚舉定義Layer Icon

layer的icon有7種樣式&#xff1a;1-7 [圖片來自&#xff1a;https://blog.csdn.net/beauxie/article/details/60959971] 有時候常常記不住 &#x1f623;&#xff0c;不防自己定義一哈&#xff1a; var layerIcon {//無none: -1,//成功success: 1,//失敗error: 2,//提問、疑…

前端進階之路: 前端架構設計(2)-流程核心

可能很多人和我一樣, 首次聽到"前端架構"這個詞, 第一反應是: "前端還有架構這一說呢?" 在后端開發領域, 系統規劃和可擴展性非常關鍵, 因此架構師備受重視, 早在開發工作啟動之前, 他們就被邀請加入到項目中, 而且他們會跟客戶討論即將建成的平臺的架構要…

C語言試題195之實現strnchr函數功能

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現strnchr函數功能 函數名稱:在字符串中查找字符 函數原型:char *strnchr(cons…

8.2設備文件及磁盤分區

2019獨角獸企業重金招聘Python工程師標準>>> 概覽&#xff1a; 設備文件的創建 權限 設備名 類型 主設備號 次設備號 mknod [-m MODE] NAME type [MAJOR MINOR] 創建時&#xff0c;先查看是否存在設備號的沖突 零磁道零扇區是MBR&#xff1a;Maste…

【ArcGIS風暴】ArcGIS求一個矢量圖層中多個圖斑的“四至點”坐標案例教程

如圖所示,為ArcGIS軟件自帶的全球矢量數據,怎樣求取每個大洲(圖斑)的四至坐標(xmin、ymin、xmax、ymax)呢? 參考閱讀:【ArcGIS遇上Python】python批量獲取柵格數據四至(top,bottom,left,right)坐標代碼 文章目錄 1. 矢量數據加載2. 四至計算結果3. 四至計算過程1.…

一個關于導出excel模板的實例

1 首先jsp頁面 點擊模板下載&#xff0c;會自動下載模板&#xff45;&#xff58;&#xff43;&#xff45;&#xff4c;&#xff0c;效果如下 讓我們看源碼&#xff1a; &#xff11; &#xff4a;&#xff53;&#xff50;頁面 <div class"tab-pane" id"p…

騰訊視頻VIP會員,周卡特價9.5元!

今天給大家推薦特價充值騰訊視頻VIP會員的平臺——幻海優品&#xff0c;騰訊視頻在線直充&#xff0c;VIP會員實時生效&#xff01;騰訊視頻VIP會員特價充值周卡&#xff1a;原價12元&#xff0c;特價9.5元月卡&#xff1a;原價30元&#xff0c;特價22元季卡&#xff1a;原價68…

解決安裝SQL Server 2005開發版時,出現“SQL Server 服務無法啟動 ”點擊重試或取消的解決方法

問題描述&#xff1a; 安裝SQL Server 2005開發版時&#xff0c;提示SQL Server服務無法啟動&#xff0c;有關詳細信息&#xff0c;請參閱SQL Server聯機叢書中的主題如何查看SQL Server 2005安裝日志文件和手動啟動SQL Server&#xff0c;如下圖所示。 此時&#xff0c;如果點…

C語言試題196之實現strstr函數功能

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目: 實現strstr函數功能 C 庫函數 char *strstr(const char *haystack, const char *nee…

svnsync實現版本庫的同步備份

svnsync實現版本庫的同步備份 實驗環境&#xff1a;A&#xff0c;172.17.201.243&#xff08;主&#xff09;B&#xff0c;172.17.201.88&#xff08;備&#xff09;項目需求&#xff0c;生產環境要求svn服務器實現熱備機制&#xff0c;于是就想到了svn自帶的svnsync機制&#…

關于數據結構(二)

文章目錄[點擊展開](?)[] 一UI返回功能思路分析實現方法二當前正在CD技能接著上文<<關于數據結構(一)>>&#xff0c;關于數據結構&#xff0c;在實際的開發中或多或少都有涉及到&#xff0c;只是看自己平時沒有積累到。下面是我在項目中的幾個實例&#xff1a; 一…

JDBC 之 事務

1.概念&#xff1a;事務指邏輯上的一組操作&#xff0c;組成這組操作的各個單元&#xff0c;要么全部成功&#xff0c;要么全部不成功。 2.數據庫開啟事務的命令dtl&#xff1a; Start transaction開啟事務 Rollback回滾事務&#xff08;撤銷&#xff09; Commit提交事務 3.JDB…

[轉]后端程序員必備:書寫高質量SQL的30條建議

以下文章來源于撿田螺的小男孩 &#xff0c;作者撿田螺的小男孩 轉載&#xff1a;《后端程序員必備&#xff1a;書寫高質量SQL的30條建議》 前言 本文將結合實例demo&#xff0c;闡述30條有關于優化SQL的建議&#xff0c;多數是實際開發中總結出來的&#xff0c;希望對大家有…

GIS熱詞:AR、VR、MR辨析

AR、VR、MR技術讓我們見識到了科技神奇的同時&#xff0c;也讓真實可感的現實世界和無法觸摸的虛擬世界的聯系更加緊密。 1. AR AR&#xff0c;全稱Augmented Reality&#xff0c;即增強現實技術。這項技術是利用電腦技術將虛擬的信息疊加到真實世界&#xff0c;通過手機、平板…