首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将.tlb作为资源文件嵌入到.NET程序集DLL中?

要将 .tlb 文件作为资源文件嵌入到 .NET 程序集 DLL 中,请按照以下步骤操作:

  1. 在 Visual Studio 中打开您的项目。
  2. 将 .tlb 文件添加到项目中。
  3. 在解决方案资源管理器中,右键单击 .tlb 文件,然后选择“属性”。
  4. 将“生成操作”更改为“嵌入的资源”。
  5. 在代码中,使用以下代码加载嵌入的 .tlb 文件:
代码语言:csharp
复制
using System.Reflection;
using System.Runtime.InteropServices;

public static class ComHelper
{
    public static Type GetTypeFromEmbeddedTlb(Assembly assembly, string tlbName)
    {
        using (var stream = assembly.GetManifestResourceStream(tlbName))
        {
            if (stream == null)
            {
                throw new ArgumentException($"Embedded TLB resource '{tlbName}' not found.");
            }

            var data = new byte[stream.Length];
            stream.Read(data, 0, data.Length);

            var guid = Marshal.GetTypeLibGuidFromAssembly(assembly);
            var typeLib = new ComTypes.ITypeLib(data, (int)stream.Length);
            Marshal.ThrowExceptionForHR(typeLib.GetLibAttr(out var libAttr));

            var majorVersion = (ushort)((libAttr.wMajorVerNum & 0xFFFF) << 16);
            var minorVersion = (ushort)(libAttr.wMinorVerNum & 0xFFFF);

            var typeLibId = $"{{{guid.ToString().ToUpper()}}}{majorVersion:X4}{minorVersion:X4}";
            var typeLibRef = new ComTypes.TYPELIBATTR
            {
                guid = guid,
                wMajorVerNum = majorVersion,
                wMinorVerNum = minorVersion
            };

            var typeLibCache = new ComTypes.ITypeLibCache();
            Marshal.ThrowExceptionForHR(typeLibCache.PutTypeLib(ref typeLibId, ref typeLibRef, typeLib));

            var typeInfo = typeLib.GetTypeInfo(0);
            var typeInfoId = typeInfo.GetTypeInfoId();

            return Type.GetTypeFromCLSID(typeInfoId);
        }
    }
}
  1. 在代码中使用以下代码加载嵌入的 .tlb 文件:
代码语言:csharp
复制
var assembly = Assembly.GetExecutingAssembly();
var tlbName = "YourNamespace.YourTlbFile.tlb";
var yourType = ComHelper.GetTypeFromEmbeddedTlb(assembly, tlbName);

现在,您已经将 .tlb 文件作为资源文件嵌入到 .NET 程序集 DLL 中,并可以在代码中使用它。

注意:在使用此代码时,请确保将 "YourNamespace.YourTlbFile.tlb" 替换为您的实际 .tlb 文件的命名空间和名称。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券