Tag: com

如何从C#中读取非托管代码的TLB(类型库)?

如何在C#中解析TLB(非托管COM服务器)中的非托管代码?

如何在C#源代码中生成COM互操作代理?

这个问题是保罗亚历山大回答“是否应签署互操作程序集”这一问题的后续问题。 。 根据Interop程序集的复杂程度 – 您可以将代理代码生成到单独的.CS / .VB文件中,并将其直接编译到程序集中。 然后,您不必担心强名称问题。 我如何将COM库的互操作代理代码生成为C#源代码? 我想可以用tlbimp完成,然后用Reflector提取源代码。 有人做过这个还是有更简单的方法?

通过COM从32位应用程序调用x64程序集

简短的问题:是否可能(当然是在x64操作系统上)? 如果不是,为什么呢? 我为excel 32开发了ac#plugin dll。 在x86中编译时,它工作正常。 在x64中编译时,COM调用失败。 我需要64位版本的Excel吗? 我认为COM不可能编译架构,并且可以在不同技术和不同架构下开发的dll之间进行通信,但我猜后者是错误的。 我猜一个x64位dll显然不能通过COM(或其他)从32位应用程序调用。

vb6 manifest添加tlb com

我正在开发一个vb6项目,并希望创建一个清单,因此不需要注册。 我使用MMM(Make My Manifest)工具扫描你的VB6项目的dll依赖项并生成清单。 但是,MMM不包含tlb文件,我有一个用.net编写的Client.dll和Client.tlb,它已暴露给COM并在我的VB6程序中使用。 我不想你使用Regasm,因为如果注册表没有注册就好了。 我尝试在命令行中通过mt工具生成一个单独的清单,’mt.exe -tlb:Client.tlb -dll:Client.dll -out:Client.manifest’ 然后我想我可以合并2清单:’mt.exe -manifest program.exe.manifest client.manifest -out:program.exe.manifest’ 但是,当我运行程序时,我收到一个消息框,显示“运行时错误-2147220999(800401f9):自动化错误,Dll中出错” 我上面做的正确,任何人有类似的经验,任何帮助赞赏。

从C#调用托管C#COM对象

我试图从C#调用C#COM对象。 我在C#中创建了一个类库,并使用tlbexe.exe导出了一个类型库。 然后我使用regtlibv12.exe注册了类型库。 但是,当我在Visual Studio中添加对COM对象的引用时,我收到一条错误消息: “Active X类型库…是从.NET程序集导出的,不能作为参考添加。而是添加对.NET程序集的引用。” 任何帮助将不胜感激。

暴露给VBA(COM)的C#属性:运行时错误’424’:需要对象

这个C#代码在.NET 4.5 ComVisible程序集中: C#代码 [InterfaceType(ComInterfaceType.InterfaceIsDual)] [Guid(“22341123-9264-12AB-C1A4-B4F112014C31”)] public interface IComExposed { double[] DoubleArray { get; set; } object[] ObjectArray { get; set; } object PlainObject { get; set; } double ScalarDouble { get; set; } } [ClassInterface(ClassInterfaceType.None)] [Guid(“E4F27EA4-1932-2186-1234-111CF2722C42”)] [ProgId(“ComExposed”)] public class ComExposed : IComExposed { public double[] DoubleArray { get; set; } public object[] ObjectArray { […]

使用com可调用包装器将一个结构数组从c#传递给C ++

考虑下面的代码,C ++使用com来访问它 namespace MarshalLib { //define an interface for account services [ComVisible(true)] [Guid(“39B8A693-79BB-4638-92DE-245A88720953”)] public interface IAccountStructLookup { AccountStruct RetrieveAccount(int acctId); void UpdateBalance(ref AccountStruct account); Alias[] GetRef(); } //Implement an account struct [ComVisible(true)] [Guid(“DB48C5B6-9646-491A-B030-C0CADCFC03E0”)] public struct AccountStruct { public int AccountId; [MarshalAs(UnmanagedType.BStr)] public string AccountName; [MarshalAs(UnmanagedType.Currency)] public decimal Balance; //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] //[MarshalAs(UnmanagedType.SafeArray)] //public Alias[] […]

需要ClassInterfaceType.None?

从MSDN中得不到以下内容: ClassInterfaceType.None 表示没有为该类生成类接口。 如果没有显式实现接口,则该类只能通过IDispatch接口提供后期绑定访问。 这是ClassInterfaceAttribute的推荐设置。 使用ClassInterfaceType.None是通过类显式实现的接口公开function的唯一方法。 COM可见性必须[ComVisible(true)]吗?

将C ++ string / wchar_t *转换为C#字符串?

问题:我需要从C ++可执行文件中调用C#dll。 我使用COM,它适用于int,long和bool。 但我不能得到一个字符串…… IDL文件说它是BSTR,但是我无法正确传递它,也没有检索到它。 我尝试使用wchar_t *并像使用VB6一样使用sysalloc,但这似乎不起作用。 有谁知道怎么回事?

如何从Win32 DLL或OCX中提取GUID

我们有一个.NET应用程序需要检查可能包含COM库(DLL和OCX)的文件夹。当我们遇到COM库时,我们需要完成的一件事是从COM DLL或OCX中提取GUID。 在没有使用第三方库的情况下,有没有直接的方法使用.NET?