From d51f4b4402c771364083d0d90b167e4fc2099601 Mon Sep 17 00:00:00 2001 From: Sergey Vlasov Date: Sat, 21 Jun 2025 19:36:40 +0500 Subject: [PATCH 01/11] Project and functions. --- .../guides-basic/dotnet-native-aot-support.md | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 docs/guides-basic/dotnet-native-aot-support.md diff --git a/docs/guides-basic/dotnet-native-aot-support.md b/docs/guides-basic/dotnet-native-aot-support.md new file mode 100644 index 00000000..b376e63b --- /dev/null +++ b/docs/guides-basic/dotnet-native-aot-support.md @@ -0,0 +1,55 @@ +--- +title: ".NET Native AOT support" +--- + +Excel-DNA can produce native 64-bit Excel add-ins, that can run on machines that don't have the .NET runtime installed, using .NET 8.0 +[Native AOT](https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/) +deployment and **ExcelDna.AddIn.NativeAOT** package. + +Publishing the following **MyAddin.csproj** C# project produces native 64-bit **MyAddin-AddIn64.xll** Excel add-in: + +```xml + + + + net8.0-windows + enable + enable + + win-x64 + true + + + + + + + +``` + +Currently supported functionality in native add-ins: + +## Functions + +```csharp +internal class Functions +{ + [ExcelFunction] + public static string NativeHello(string name) + { + return $"Hello {name}!"; + } + + [ExcelFunction] + public static int NativeSum(int i1, int i2) + { + return i1 + i2; + } +} +``` + +| Cell | Formula | Result +| ----- | -------------------- | ------ +| A1 | =NativeHello("AOT") | Hello AOT! +| A2 | =NativeSum(2, 3) | 5 + From 9f66607ccb04f80cd4c74b373a07b8b82d813846 Mon Sep 17 00:00:00 2001 From: Sergey Vlasov Date: Sat, 21 Jun 2025 20:16:43 +0500 Subject: [PATCH 02/11] Async function, AddIn --- .../assets/native-aot-auto-open.png | Bin 0 -> 2799 bytes .../guides-basic/dotnet-native-aot-support.md | 39 +++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 docs/guides-basic/assets/native-aot-auto-open.png diff --git a/docs/guides-basic/assets/native-aot-auto-open.png b/docs/guides-basic/assets/native-aot-auto-open.png new file mode 100644 index 0000000000000000000000000000000000000000..6a011a21095fce166a59f9d9e5ae4fb1044a5fe7 GIT binary patch literal 2799 zcmb7G3pA8l8~%nFhK}eE9U($Pa_u&gG%gu4)Xp`qx?i|F3oST6;gw`##V6?wN0YYxXdl$aZqF zspW!Dtx0h4g#c))j=x=Do$AQ%@YMQSEmD1 zTN;gKYisM{<0BG@fTyXcNhIRJfWh28HW7k|>^^Y}Lqw4{CIZR@PH|d;C20WT;6qPQ4Tu6AUz*)S3G7jebgh`4MnaKqD|=hLg&JZ_a+hUG!z z8w##0=%*CuWC?Vx7CO&|LOK(Qn;`c*i2eq0PBIC|gdsvI_z-=m1c(3_1Xj>9m9QEU zU>GJqP$~gV<)#7|CZwkJ^??cy5Fj`;Rjh-E%Y{?>z(VK~^#Sk9%#1)FShsGSAm1C$ zs1pEy#0UWL&aY$O#Q+=vF=gQKtLV+B1G+a5@OV5hu2u+2*IwcSE<+=_(jjQ=OYua! z3dr*U$qlgWVc0pq8xHmiIt4j-`kjM~$hK6?okpfc*o}S@dBF4d)M1i0iL@0$g8&7o zB2W+lFncgJ{>8zOLwX3w)w~4YrU(g00pJlZ{bG@;`O|=lhX z(aP%Og^N*XLqpBoLwj+fJ9-+l6b5EmAsn11aR!0;8l@QioMF*lt3f*-Og`FAzWO~(YsAO~{V z_1>&4?bh!<3-y9Dd}Ezjf6-T=;!VFlB%l1vGJ4<hZNPvg+0AvE?-#SOQ?*>QQtPtWhs z_n+6BadGumZ@ zIR#3@$06%ax~%ol#ta`P4-bNo30_MbFUoxQxhSiA#k9HM6m8ClvNOf1Qs9+bt~E~iwJa`=JasQKmj?%T1osbT1G?WCO^!mZCzjT|_R zg+}QGQPvn0`uvtqjDd=q!n!>-N^f5ep(nm}%>V6a;pcZTYlx>|!^B!tuy?KwLnXJc>UKeJ?4yn$zFzkr0#Tf*-II9|Jam>D|@b1XJd4X z-+pNcAb+;MF!;hS)a)?DM#a6f#?2$EVx`VIi^8=ql-VG6bDDPl>m6qj-%FC)CUZXs zWfkw@CWTz!La>pobnA#^cx zA%&SFq*+hlw&x^-CTh6(I~i1DC2sCLkb#lku zv&8S4Z=db&+QX?fK))HndzV*4B&aTQhclnr98~Q}U@k2qZTO|%e*LYxO{vCFV|YI6 z(Fl@vX;xy|#x!V$p9W6X?cH^jXxGo@H>=Ku{-SPMSXM^hPy;xllDQv#bj0Lm@~l;3 z{NL~9YIDRpcHuJV%roz#%2@_a_B}H2ta9=%Ejpx?e0lklLy3cl&cVi!(;K~995>_q zd$&G0wKAIS(y?VOK%VR#db4v-VAuZoUSXU6a#*eKNQ}CXd2mk+Z+&w6%;BUo;)Pdo zfzfL^&PPsu+SQ78Y3QDU`PChQ`d0AlN_2S&-|^VDWamBHe;Ig_QZ9QgSzGvdz}nIE zPKDFh(2w{vmGgt{Y5{!oR%2dxqvs7@`2klqBjXAsmSm!;x@C4QLGj@hO{NEDFqD>y z4v_4eJ)D6GKw}xx7mRO*POSZCxAED<7g~NtjC_$yY@wk>rJkn4^Q(_?YL0h~1_gc~P&6OFd+*u2G0)FLry>3KzH*KoeVl|;VoC)ss538C$tg7~ zS45++`R!lg`kQKmzFFmtSRDrk?e8~P#5xtQ%N#U`cbjHER+a39?frJi8D+PURw|R& ztjh~M_I9~Fm#s2c--2)9Fw)cJ#A)SW$Y~PU_f|gc1ZE+*BSSARI$gN-ni*z6ol)a7 zg5)~v*kI4;5B?}+t%6zTX-Bj+%edA|)26rgaH51#;!EY9|K9xP&4gP-bV>Z*HY~Tn zmF;uAfs2%Wug)jRJ?2KoW!aM{Kly)%kY9ODlJ_h77%;_Irtxj^(&r?w<62{wua@{? zyE_q|G~@2Y9zEKfpb;QksC|pF#E NativeAsyncTaskHello(string name, int msDelay) +{ + await Task.Delay(msDelay); + return $"Hello native async task {name}"; +} +``` + +| Cell | Formula | Immediate Result | Final Result +| ----- | ----------------------------------- | ---------------- | ------------------------- +| A1 | =NativeAsyncTaskHello("Test", 5000) | #N/A | Hello native async task Test + +## AddIn + +```csharp +public class AddIn : IExcelAddIn +{ + public void AutoOpen() + { + var thisAddInName = Path.GetFileName((string)XlCall.Excel(XlCall.xlGetName)); + var message = string.Format("Excel-DNA Native AOT Add-In '{0}' loaded!", thisAddInName); + + MessageBox.Show(message, thisAddInName, MessageBoxButtons.OK, MessageBoxIcon.Information); + } + + public void AutoClose() + { + } +} +``` + +![AutoOpen](./assets/native-aot-auto-open.png) + +## DynamicApplication \ No newline at end of file From a2b5beea281085784b60dacd06b4e11d0082fc24 Mon Sep 17 00:00:00 2001 From: Sergey Vlasov Date: Sun, 22 Jun 2025 09:36:00 +0500 Subject: [PATCH 03/11] Command, Ribbon --- ...aot-auto-open.png => native-aot-addin.png} | Bin .../assets/native-aot-command-message.png | Bin 0 -> 1290 bytes .../assets/native-aot-command-ribbon.png | Bin 0 -> 6568 bytes .../assets/native-aot-ribbon-message1.png | Bin 0 -> 1669 bytes .../assets/native-aot-ribbon-message2.png | Bin 0 -> 1708 bytes .../assets/native-aot-ribbon-ui.png | Bin 0 -> 8789 bytes .../guides-basic/dotnet-native-aot-support.md | 56 +++++++++++++++++- 7 files changed, 55 insertions(+), 1 deletion(-) rename docs/guides-basic/assets/{native-aot-auto-open.png => native-aot-addin.png} (100%) create mode 100644 docs/guides-basic/assets/native-aot-command-message.png create mode 100644 docs/guides-basic/assets/native-aot-command-ribbon.png create mode 100644 docs/guides-basic/assets/native-aot-ribbon-message1.png create mode 100644 docs/guides-basic/assets/native-aot-ribbon-message2.png create mode 100644 docs/guides-basic/assets/native-aot-ribbon-ui.png diff --git a/docs/guides-basic/assets/native-aot-auto-open.png b/docs/guides-basic/assets/native-aot-addin.png similarity index 100% rename from docs/guides-basic/assets/native-aot-auto-open.png rename to docs/guides-basic/assets/native-aot-addin.png diff --git a/docs/guides-basic/assets/native-aot-command-message.png b/docs/guides-basic/assets/native-aot-command-message.png new file mode 100644 index 0000000000000000000000000000000000000000..9d25aac1f39436c439123072ce04493c5cb3d3fc GIT binary patch literal 1290 zcmeAS@N?(olHy`uVBq!ia0vp^lYqFDgBeJ+mj%uTQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`F9rC7xE2%?{Qv(S$UAf93@baw|Nr|-fSi*3_h-8?Fu2XW|G$L6tpvyi zD%xKHg9N4F(T0J1p?JR*x382Ao@Fyrz36)8YL zi4xa{lHmNblJdl&REB`W%)AmkKi3ciQ$0gH3+c>PD}ZXYrABzBd3tIwZ~!^13{s4& z42(dQ7Z6KB*`To2U}Of1GXdF#j7$syKspMDGuv6f;#oj82qXY8NI#55vy=fCTNBtB zSb!=FjEoH!7eGt}>0n&|F=+~r4FXI+bC|#?gDfq8ET}F+0|Suk>IOyO;CU7rKy|l0 zT^vIy;@(c{E}P{b(8lVlaw);kcWvmcB}-n)3UBo^&Aj~j_x_;tvT!b~dH1I<9X}^t zl7H@(p>@%v70O{}1yorAoxsG3h?9A*wq?GawlZSn&gFA_7O(vEV2aPN6~CgC=B^3k zJ+*u1bW@?FrdQrSnBsSBWs<7$B

EnvD zGqTSQE|im~xxLML8UKVgQ%`TYs(rq%If@=*JQ!(1r@u6FO^&hEHtTE7UVg#lw2+{@QfoK%Z1n0aMQ3{LyrGbu7+uTkN$hYh@IG+dwSrK?I@ zYJ4eq+VWAnIivf7dLGVVVR`bBDA?A@%Fb=nSS-lKORq=8SUH|x$B=v_jB{`H6*zEjmb-6fOQ{P*~`TghF`HxSQPdmMQi;m>d+b@5xhlkibP3>G=RamfU zws&Tv(bL+Mr+z=zH{RK1G~fIB%Ju_l%Rg;u`83~tuVdG_pkM#z{r)GqIz%9Cf6LsU jU+KsRh)MHmkK1E&0nUu)M^k3Bf|9(atDnm{r-UW|#kdOS literal 0 HcmV?d00001 diff --git a/docs/guides-basic/assets/native-aot-command-ribbon.png b/docs/guides-basic/assets/native-aot-command-ribbon.png new file mode 100644 index 0000000000000000000000000000000000000000..0483f940861ae45435e0391b8989140e5114ec3a GIT binary patch literal 6568 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 E8}miXYXATM literal 0 HcmV?d00001 diff --git a/docs/guides-basic/assets/native-aot-ribbon-message2.png b/docs/guides-basic/assets/native-aot-ribbon-message2.png new file mode 100644 index 0000000000000000000000000000000000000000..288fa47b694111342b001e2e096d51b233d46090 GIT binary patch literal 1708 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 z z^WrR)of7i2%i0xifg+UBKmLld@{8(T)-KarQ3p!@JJU+!11R`SDg^02V*dKo=O0n? z;1)s>$a&_RdXg~apUOnidSjqVVkuDk;>rZEvwx5;>5j_>fOEk=l5tG!>_-u>^q$A< z#k|;QDipTE&ivVxU;JHj&=CftNQ)wmL~V$Zs#FwXNM=}LT;U230+I`d$jn{jhGSQ$ z>+<}pbe&*nMjcBxkdBTxTYGpX`1Xr?c6UAB9^WA*pDha=#@LSU;FOOIMf9j8;%pA< zqAG|4vMCUXinvq`;4z^b7zH|Br>p`yy{jcRCWxJ88R@B~(+K_mv%poL8WstS0 + + + + +