最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#?創(chuàng)建vba用的類庫

 更新時(shí)間:2026年04月22日 10:14:12   作者:fengyehongWorld  
本文詳細(xì)介紹了如何在VBA中使用C#編寫的COM組件,首先創(chuàng)建一個(gè)C#項(xiàng)目,定義ComVisible特性和生成GUID,然后修改.csproj文件并編譯生成.dll文件,之后將該.dll文件注冊到系統(tǒng),最后在VBA代碼中使用CreateObject方法創(chuàng)建該對象并調(diào)用其方法

一. 需求

??寫vba代碼的時(shí)候,會想下面這樣使用CreateObject創(chuàng)建一個(gè)對象,然后使用其中的方法

Sub SendGetRequest()
    Const url = "https://api.github.com"
    ' 創(chuàng)建http請求對象
    Dim http As Object
    Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
    ' 發(fā)送get請求
    http.Open "GET", url, False
    http.Send
    Debug.Print http.ResponseText
End Sub

??先要求在vba中使用CreateObject("ToolLib.ToolCom")創(chuàng)建一個(gè)對象,然后使用其中的方式。

Sub MainSub()
    Dim obj As Object
    Set obj = CreateObject("ToolLib.ToolCom")
    MsgBox obj.Hello("World")
    MsgBox obj.Add(3, 5)
End Sub

??用C# 寫一個(gè)能被VBA調(diào)用的COM組件,把.NET類暴露成COM可見對象。

  • C#寫類
  • 標(biāo)記為COM可見
  • 編譯成DLL
  • 注冊到系統(tǒng)(regasm)
  • VBA 通過CreateObject調(diào)用

二. 初始化項(xiàng)目

??創(chuàng)建一個(gè)類庫

dotnet new classlib -n ToolLib

??修改.csproj文件如下所示

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
	<!-- 推薦用 .NET Framework -->
    <TargetFramework>net48</TargetFramework>
	<!-- 關(guān)閉自動(dòng)注冊 -->
    <RegisterForComInterop>false</RegisterForComInterop>
	<!-- 關(guān)閉自動(dòng)生成AssemblyInfo -->
	<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
	<!-- 不輸出調(diào)試信息 -->
    <DebugType>none</DebugType>
  </PropertyGroup>
</Project>

三. 項(xiàng)目代碼

3.1Tool.cs主類

??Tool.cs

  • [ComVisible(true)]:設(shè)置Com可見, 否則vba無法使用
  • [Guid("xxxxx-xxxx-xxxx-xxxxxxx")]:類庫的唯一標(biāo)識符,可以使用 Visual Studio 生成。
using System.Runtime.InteropServices;
namespace ToolLib
{
	[ComVisible(true)]
	[Guid("1D4C98EC-D988-4D6C-8DD6-189E238D7B4E")]
	[InterfaceType(ComInterfaceType.InterfaceIsDual)]
	public interface IToolCom
	{
		int Add(int a, int b);
		string Hello(string name);
	}
	[ComVisible(true)]
	[Guid("6143FB0B-9C17-4859-860C-6DA4A466ECD1")]
	// 顯示聲明ProgId, 便于vba通過 CreateObject("ToolLib.ToolCom") 創(chuàng)建對象
	[ProgId("ToolLib.ToolCom")]
	[ClassInterface(ClassInterfaceType.None)]
	public class ToolCom : IToolCom
	{
		public int Add(int a, int b)
		{
			return a + b;
		}
		public string Hello(string name)
		{
			return $"Hello, {name}";
		}
	}
}

??生成GUID的方法

3.2AssemblyInfo.cs配置類

using System.Reflection;
using System.Runtime.InteropServices;
// 文件→屬性→詳細(xì)信息→文件說明
[assembly: AssemblyTitle("ToolLib_Test")]
// vba→工具→引用 時(shí)顯示的信息
[assembly: AssemblyDescription("FengYeHong VBA COM Library")]
[assembly: AssemblyCompany("FengYeHong-Company")]
// 文件→屬性→詳細(xì)信息→產(chǎn)品名稱
[assembly: AssemblyProduct("ToolLib_for_vba")]
// 非常重要
// 類型庫 GUID
[assembly: Guid("9F3E7D2C-1234-4A56-8888-ABCDEF123456")]
// 文件→屬性→詳細(xì)信息→產(chǎn)品版本
[assembly: AssemblyVersion("1.0.0.1")]

四. 編譯

??該工程要生成的是一個(gè)類庫,因此需要通過編譯生成所需的.dll文件

五. 將.dll類庫注冊到系統(tǒng)

??篇幅較長,不在此篇文章展開,詳情請參考下面這篇文章。

Powershell 注冊.dll類庫到系統(tǒng)

六. vba中使用

??當(dāng).dll類庫注冊到系統(tǒng)之后,vba就可以正常使用該類庫了。

到此這篇關(guān)于C# 創(chuàng)建vba用的類庫的文章就介紹到這了,更多相關(guān)C# 創(chuàng)建vba類庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#實(shí)現(xiàn)XML序列化與反序列化

    C#實(shí)現(xiàn)XML序列化與反序列化

    這篇文章介紹了C#實(shí)現(xiàn)XML序列化與反序列化的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • c#后臺線程訪問前臺控件并顯示信息示例

    c#后臺線程訪問前臺控件并顯示信息示例

    這篇文章主要介紹了c#后臺線程訪問前臺控件并顯示信息示例,需要的朋友可以參考下
    2014-03-03
  • C#交錯(cuò)數(shù)組淺析

    C#交錯(cuò)數(shù)組淺析

    這里介紹C#交錯(cuò)數(shù)組,數(shù)組是具有同一類型的一組值,數(shù)組是引用類型的,因此存在內(nèi)存堆中。數(shù)組中的元素值可以在定義數(shù)組時(shí)賦予,也可以在定義數(shù)組后對單個(gè)元素進(jìn)行賦值
    2012-09-09
  • C#實(shí)現(xiàn)程序最小化后重新拉起并強(qiáng)制置頂顯示的技術(shù)指南

    C#實(shí)現(xiàn)程序最小化后重新拉起并強(qiáng)制置頂顯示的技術(shù)指南

    本文詳細(xì)講解了程序在最小化后重新拉起的并置頂?shù)膶?shí)現(xiàn)方法,首先分析了該場景與普通重啟的不同之處,接著闡述了單實(shí)例檢測的方法、窗口狀態(tài)恢復(fù)的技術(shù)路徑、突破前臺限制的核心思路,需要的朋友可以參考下
    2026-05-05
  • C# System.Text.Encoding使用小結(jié)

    C# System.Text.Encoding使用小結(jié)

    System.Text.Encoding類及其派生類提供了豐富的功能,幫助開發(fā)者實(shí)現(xiàn)不同字符編碼之間的轉(zhuǎn)換,本文就來介紹一下C# System.Text.Encoding使用,感興趣的可以了解一下
    2025-07-07
  • C#?Razor語法規(guī)則

    C#?Razor語法規(guī)則

    這篇文章介紹了C#?Razor的語法規(guī)則,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • C#實(shí)現(xiàn)Markdown內(nèi)容轉(zhuǎn)為Word或PDF

    C#實(shí)現(xiàn)Markdown內(nèi)容轉(zhuǎn)為Word或PDF

    Markdown作為一種輕量級的標(biāo)記語言,因其簡潔易讀、語法清晰的特點(diǎn)被廣大程序員和技術(shù)文檔編寫者所青睞,本文主要介紹了如何使用C#實(shí)現(xiàn)Markdown內(nèi)容轉(zhuǎn)為Word或PDF,需要的可以參考下
    2024-03-03
  • Unity中的PostProcessScene實(shí)用案例深入解析

    Unity中的PostProcessScene實(shí)用案例深入解析

    這篇文章主要為大家介紹了Unity中的PostProcessScene實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • c# wpf使用GMap.NET類庫,實(shí)現(xiàn)地圖軌跡回放

    c# wpf使用GMap.NET類庫,實(shí)現(xiàn)地圖軌跡回放

    這篇文章主要介紹了c# wpf使用GMap.NET類庫,實(shí)現(xiàn)地圖軌跡回放的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • 在WinForm中發(fā)送HTTP請求的實(shí)現(xiàn)方法

    在WinForm中發(fā)送HTTP請求的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄赪inForm中發(fā)送HTTP請求的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06

最新評論

靖边县| 柳河县| 调兵山市| 永安市| 宜州市| 伊春市| 大兴区| 河西区| 绥德县| 鄯善县| 固安县| 仙游县| 扎兰屯市| 靖宇县| 景东| 龙岩市| 沂南县| 巫山县| 高安市| 微山县| 博兴县| 那坡县| 天全县| 政和县| 定边县| 招远市| 阿瓦提县| 容城县| 蓬安县| 广德县| 将乐县| 顺平县| 婺源县| 兴海县| 云南省| 兴安县| 迁安市| 远安县| 寿宁县| 万宁市| 谢通门县|