Tag: com

使用C#进行Catia V5自动化

我想用编程语言C#为Catia V5编写宏/程序。 如何通过c#(和Visual Studio)访问Catia应用程序。 我搜索了一下,发现Catia提供了一个API,Microsoft COM Technologie为c#和python等’COM-languages’提供了API。 这就是我想象C#Programm和Catia之间的连接/交互: C# – .NET COM Catia API 那是对的吗 ? 另外:如何在Visual Studio中设置所有内容,以便我可以访问Catia API(以及代码完成等)

使用自定义IDownloadManager从WebBrowser控件访问AccessViolationException

我的.NET应用程序托管了一个WebBrowser控件,并且我附加了一个自定义下载管理器。 除了具有以下两个HTTP标头的请求之外,一切似乎都能正常工作: Content-Type: application/octet-stream Content-Disposition: attachment; filename=blahblahblah 更改或省略内容类型标题,一切正常; 它只是具有问题的application / octet-stream。 删除内容处置标头,不使用下载管理器。 有趣的是,这个问题只发生在32位机器上(我测试过XP和Win 7 32位.Win 7/8 64位不会崩溃)。 application/octet-stream什么特别之处? 如果它有帮助,这里有大量代码注册自定义下载管理器。 它的灵感来自于这个问题和答案: Windows Forms Webbrowswer控件与IDownloadManager 在我的类中,派生自WebBrowser : protected override WebBrowserSiteBase CreateWebBrowserSiteBase() { var site = new DownloadWebBrowserSite(this); return site; } 在DownloadWebBrowserSite : DownloadManager _manager = new DownloadManager(); public int QueryService(ref Guid guidService, ref Guid riid, out IntPtr […]

自定义WebBrowser(winforms)代码上的致命错误

在CustomWebBrowser(winforms)代码上获得致命exception。 “ 运行时遇到致命错误。 错误的地址是0x6c9a60c6,在线程0xf94上。 错误代码是0xc0000005。 此错误可能是CLR中的错误,也可能是用户代码的不安全或不可validation部分中的错误。 此错误的常见来源包括COM-interop或PInvoke的用户封送错误,这可能会破坏堆栈。 ” 这在安装了.Net Framework 4.5的计算机上运行良好,但不适用于具有.Net framework 4.0的计算机 // constructor public AutoCompleteWebBrowserSite(WebBrowser host) : base(host) { // get the CCW object for this _unkOuter = Marshal.GetIUnknownForObject(this); Marshal.AddRef(_unkOuter); try { // aggregate the CCW object with the helper Inner object _inner = new AutoCompleteHelper(this); _unkInnerAggregated = Marshal.CreateAggregatedObject(_unkOuter, _inner); // obtain private […]

是否有最佳实践来访问C ++本地COM函数以从C#进行互操作?

是否有最佳实践来访问C ++本地COM函数以从C#进行互操作? 例如,如果我有100个C ++方法(基本上是本机库),它与核心窗口组件交互。 我想基本上在C#中为这些C ++方法创建一个包装器,所以我所有新雇用的员工都可以使用它而不是C ++等.C ++代码是遗留的并且让我感到害怕,所以我只想处理它一次。 这里的方法是否为每个方法都有一个相应的C#方法? 事实上,还有另一种方法吗? 我可以使用某种包装子系统吗? 你们这些人一般都这样做吗? 此外,是否有任何性能考虑等?

如何从C#调用DCOM对象?

我有一个CLSID,我需要在不同的服务器(即DCS)中实例化这个,就像我的工作机器一样(即MWS)。 现在,如果我使用以下内容: var type = Type.GetTypeFromCLSID(new Guid(CLSID), Environment.MachineName, true); var COMObject = Activator.CreateInstance(type); var returnValue = COMObject.GetType().InvokeMember(methodName, flags, null, COMObject, args, argModifiers, null, null); 然后我得到“COM目标没有实现IDispatch”错误。 好吧,我知道可能COM目标对象没有IDispatch,所以它失败了。 现在尝试了其他的东西,如果我在VS中添加该COM DLL的引用,那么VS生成互操作程序集然后一切都像常规.net对象创建一样工作,但在这种情况下,对象实际上是在我的本地机器中生成的(MWS) pc)没有进入我想要的服务器。 伙计们有什么建议我怎么处理这种情况? 提前致谢。

CLR2编译的C#COM不适用于.Net 4

有谁知道为什么在CLR2(.Net 3.5)下编译的C#创建的COM库在仅与CLR4(.Net 4)一起使用时不起作用? CLR4中缺少什么在CLR2中用于COM? 我们在app.config中使用适当的启动来使C#在CLR4 / .Net 4下运行: 所有的C#东西都有效,直到它尝试创建我们的COM接口。 它提供了以下例外: 无法加载运行时。 (HRESULTexception:0x80131700) 当我们尝试从C ++创建COM接口时,我们遇到了同样的问题。 一旦我们安装CLR2(.Net 3.5),所有COM内容开始工作。 我们想知道发生了什么。

是否可以通过COM互操作转发代表?

我上课了: public class A { public delegate void SetTextDel(string value); public void Test() { SetTextDel setText = someInterface.SetText; icom.Set(setText); } } [ComVisible(true), Guid(“81C99F84-AA95-41A5-868E-62FAC8FAC263”), InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface Icom { void Set(Delegate del); } [ComVisible(true)] [Guid(“6DF6B926-8EB1-4333-827F-DD814B868097”)] [ClassInterface(ClassInterfaceType.None)] [ComDefaultInterface(typeof(Icom))] public class B : Icom { Set(Delegate del) { del.DynamicInvoke(“some text”); } } 我在Set(Delegate del)中获得了targetinvocationexception。 有没有更好的方法来转发委托作为参数? 或者我在这里犯了一些我没有看到的错误。 我想做的是将someInterface.SetText这个方法作为参数传递。 谢谢你的帮助。

STA中的Akka.net演员

我需要将不同格式的数千个ms办公文档转换为一种通用格式。 为了加快速度,我将使用akka.net进行并行化。 WordSaveAsActor应该: 在单线公寓中运行 持有Word应用程序实例 在此实例上进行COM调用,例如SaveAs(..),其中包含来自多个并行线程的接收消息的路径 任何崩溃都会重启自己 甚至可以在STA中运行akka.net actor吗? 如果我以这种方式使用akka.net,有什么顾虑吗?

如何通过CLSID在C#中实例化COM对象?

如果我的术语已经关闭,请原谅我,因为这对我来说是一个有点未知的领域。 我有一个程序需要创建FolderShortcut 。 Microsoft有关于如何使用C ++创建它的文档 ,我正在尝试将方向转换为C#。 指令声明需要使用CLSID_FolderShortcut作为参数调用CoCreateInstance函数,我推断它意味着它实例化COM对象。 该对象的CLSID是{0AFACED1-E828-11D1-9187-B532F1E9575D} 。 我尝试从COM选项卡添加对Shell32.dll的引用,但是FolderShortcut对象没有出现在Intellisense中(也许它不在typelib中?)。 我还想过做一个DLLImport ,但是,当然,这只能让我访问函数,而不是对象。 要在.Net中访问此对象,我需要做什么?

在C#中使用ComImport,如何在shell32.dll中找到像IFileDialog这样的类的GUID?

我一直在尝试使用ComImport为我正在编写的C#应用​​程序设置一些与各种dll中的win32类的互操作。 我不明白你是如何找到class级的GUID的? 我找到了一些有效的导入示例,但我不确定作者是如何找到类的GUID的。 下面列出了导入IFileDialog及其方法之一的示例。 [ComImport(), Guid(“42F85136-DB7E-439C-85F1-E4075D135FC8”), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] internal interface IFileDialog { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)] [PreserveSig()] uint Show([In, Optional] IntPtr hwndOwner); //IModalWindow 我正在使用Visual Studio 2012,我可以看到如何在COM选项卡上的Microsoft Shell控件和自动化中添加对shell32.dll的引用,但这似乎对我没有任何作用。 我在这里想念的是什么? 你在哪里找到GUID? 有没有办法让Visual Studio生成上面列出的代码,或者我是否需要找到每个类的GUID,然后编写上面列出的方法导入?