使用c#使我的应用程序被允许通过防火墙访问
我试图通过防火墙允许使用我的应用程序,因为我必须在主动和被动模式下进行FTP,因为无法为此配置服务器.因此,我尝试了以下编译良好的代码,我使用: 将其删除. MyApp.Classes.INetFwMgr mgr = new MyApp.Classes.INetFwMgr(); mgr.AuthorizeApplication(Application.ProductName, Application.StartupPath, NET_FW_SCOPE_.NET_FW_SCOPE_ALL, NET_FW_IP_VERSION_.NET_FW_IP_VERSION_ANY); 和完成工作的课程: private const string CLSID_FIREWALL_MANAGER = "{304CE942-6E39-40D8-943A-B913C40C9CD4}"; private static NetFwTypeLib.IN
0 2024-04-16
编程技术问答社区
使用C#和COM提取InDesign CS4图形
我正在尝试在Indesign文件中获取图形的详细信息.出于技术原因,我正在使用com.不是我的最爱,(如Stackoverflow中的其他地方讨论),您必须花一半的生活.从理论上讲(!),代码段Belwo应该起作用. Intellisense显示 doc.allgraphics 作为返回 对象 . for (int g = 1; g
0 2024-04-16
编程技术问答社区
免注册的类COM互操作和线程
我正在使用具有WPF GUI和不受管理的C ++后端的桌面应用程序. 我已经定义了以下方式(C#版本,截断): [Guid( "###" ), InterfaceType( ComInterfaceType.InterfaceIsIUnknown )] interface iMyApp { void aMethod(); } [DllImport( "my.dll", PreserveSig = true )] public extern static int create( string configPath, out iMyApp a ); 在后端我有 __interface __declspec( uuid( "###" ) ) iMyApp: public IUnknown { HRESULT __stdcall aMethod(); } 和经典ATL实现. 这可以很好地工作,不需要COM注册,不需要类型库,没有MIDL编译器等.
0 2024-04-16
编程技术问答社区
从64位代码中访问32位DLLs
我需要迁移一个32位DLL,以便在64位C#(以及C ++)应用程序中使用它. DLL用不受管理的Delphi代码编写.我无法重新编译DLL,唯一的方法是使用Intercocess Communication(IPC).我搜索了很长时间,但发现有关的信息很少.我在此链接中找到的最好的指南是:从64位代码访问32位DLL . 我遵循本指南以实现我的目标,因为在这个论坛中经常引用.因此,指南解释了我必须采取三个步骤: 1°步 - 创建一个32位组件,该组件实现了一个COM对象,该对象将加载并调用32位DLL,并将32位DLL接口公开为COM接口.因此,我做了与解释[ComVisible(true), GuidAttribute("137AD71F-4657-4362-B9E4-C6D734F1F530")] [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface IGetMyString { strin
0 2024-04-16
编程技术问答社区
COM互操作对象在一个项目中抛出InvalidCastException,但在另一个项目中没有。
我有一个在测试C#解决方案中导入的com对象. 一切正常,并继续这样做. 然后,我在实际解决方案中导入了相同的com对象,作为实现的测试与测试项目完全相同的行. 当我运行真实项目时,我会得到一个无效的castexception 无法将'ctwebreport.webreportcomclass'类型的对象施加到接口类型'ctwebreport.iwebreportcom'.此操作失败了,因为查询因面在COM组件上与IID接口的com组件调用{5DFA18E8-4E71-4E71-4ADC-A812-A812-6B166C242561}'由于以下错误而失败了:没有支持此类界面(没有此类界面(来自HRESULT:0x80004002(e__noInterface)除外) . 我搜索了我的整个系统,以获取Interop和com库的每个引用,其中包括我能找到的所有垃圾箱和OBJ文件夹. 除原始的com库除了我全部删除了它们,并彻底清理了我的回收箱. 没有区别,情况完全相同.
0 2024-04-16
编程技术问答社区
COM方法,Char类型和CharSet
这是我以前问题的后续措辞: die .net Interop复制数组来回复制,或者它固定数组? 我的方法是com接口方法(而不是DllImport方法). C#签名看起来像这样: void Next(ref int pcch, [In, Out, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] char [] pchText); msdn 当托管char类型(默认为unicode格式)时, 传递给非托管代码,Interop元帅转换了角色 设置为ANSI.您可以将dllimportattribute属性应用于 平台调用声明和structlayOutAttribute属性 转到com Interop声明以控制哪个字符设置一个 填充炭类型的用途. 另外,@hanspassant在他的答案中在这里说: char []不能以lpwstr的形式提交,它必须是lparray.现在 charset属
0 2024-04-16
编程技术问答社区
暴露于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
0 2024-04-16
编程技术问答社区
使用com可调用包装器将结构数组从c#传到C++中
考虑使用COM C ++访问的代码下面的代码 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 [Com
0 2024-04-16
编程技术问答社区
当使用隔离COM时,应用程序在CoCreateInstance期间挂起。
当我不配置客户端dll(globalsd.dll)以使用隔离的com访问.NET汇编,该汇编在运行MAIM可执行文件(FCMTSYSM.EXE)之前,会曝光com接口(FSCulture.dll),我会得到一个应用程序异常(违反访问),因为cocreateinstance在DLL(syslev0.dll)的静态初始化期间失败,该DLL(syslev0.dll)在启动过程中调用客户端DLL(globalsd.dll)(代码继续尝试运行并使用不存在的COM对象).我理解并可以处理这一点.我需要改进错误处理和/或以regasm和/或配置globalsd.dll进行com对象. 但是,当我为孤立的com配置globalsd.dll时,给它一个tlb文件和fsculture.dll fileName时,整个应用程序在globalsd.dll>>>>>>>>>>>>>> globalsd.dll的过程中都挂着到.我尝试在FSCulture.dll中创建的对象的构造函数中设置一个断点,但永远不会
0 2024-04-16
编程技术问答社区
将C++字符串/wchar_t*转换为C#字符串?
问题:我需要从C ++可执行人员调用C#DLL. 我使用com,它适用于int,long and bool.但是我无法沿着字符串... IDL文件说这是一个BSTR,但我无法正确传递,也不能检索一个. 我尝试使用WCHAR_T*并像对VB6一样使用Sysalloc,但这似乎不起作用. 有人知道如何或可能是什么问题? 解决方案 如果您使用的是ATL,则可以这样做: std::string theString = "hello"; CComBSTR bstr(theString.c_str()); DoSomething(bstr); // Function that takes a BSTR as an argument 或没有ATL: const wchar_t* theString = L"hello"; BSTR bstr = SysAllocString(theString); DoSomething(bstr); SysFreeString(
0 2024-04-16
编程技术问答社区
我怎样才能用C#编程控制Win7中的麦克风和麦克风提升设置?
Windows 7具有一些新的音频设置,我无法从C#应用程序中控制这些设置.具体而言,在输入(麦克风)属性中,有一个级别选项卡,其中包含麦克风和麦克风的升压滑块,以及一个麦克风静音拨动/复选框. 我需要在编程上确保麦克风没有静音 - 但还没有找到必要的API来读取或设置值. 解决方案 您可以使用 http://www.codeproject.com/kb/audio-video/audiolib.aspx?msg=1323850 根据此页面上的文档: 特定的控件,例如FADDER,麦克风增强,低音,高音等,可以使用calueSigned,ValueSnsignsignsignsignsignsignsignsignsignsignsignsignsignsignsignsignsignsignsignsignsignsignsign和ValueAsboolean Properties通过MixerControl对象访问,但是它们并非因为它们不属于所有控件而作为标
0 2024-04-16
编程技术问答社区
调用C# COM对象
好吧,我已经创建了一个C#dll,使所有界面和方法都可以comvising(true).使用gacutil将其添加到GAC中,然后使用regasm进行注册并创建一个类型的库TLB文件. 现在,我有另一个C#项目,我想对该com对象进行呼叫,该怎么办?代码大致导入com对象然后使用其调用是什么样的? 解决方案 首先,为什么要通过COM在其他C#项目中调用C#zedbly(您可以使您的comsbly)称呼?这不是必需的... 原始: 如果您创建了一个TLB文件,那么您不应该做任何特别的事情.您只需引用您创建的C#汇编的"运行时可呼叫包装器". 其他解决方案 步骤1:创建一个可行动时间 - 可容纳. 有两种方式 方法1:使用tlbimp生成rcw tlbimp .tlb /out:.dll 使用这种方式使用默认的.NET-Interop编组,有时(意味着它在不起作用时)您需要通过执行其他步骤来更改编辑
0 2024-04-16
编程技术问答社区
将数组从C#的COM对象传递到JavaScript?
类似于此如何将一系列字符串从Activex对象返回到JScript 但在C#中. 我有一个com控件,该控件将一系列字符串传递给JavaScript.似乎JavaScript无法理解我正在传递的内容,而JavaScript中的数组总是不确定的. javaScript: try { keystore.openKeyStore("MY", true, false); var fNames = new Array(); fNames = keystore.getAllFriendlyNames(); document.getElementById('par').innerHTML = fNames[0]; } catch(err) { document.getElementById('err').innerHTML = err.description; } 为fNames[0]; 输出"未定义" c#: public obj
0 2024-04-16
编程技术问答社区
如何从一个Win32 DLL或OCX中提取一个GUID
我们有一个.NET应用程序需要检查一个可能包含COM库的文件夹(DLL和OCX.).当我们遇到COM库时,我们需要完成的一件事就是从COM DLL或OCX中提取GUID . 是否有一种直接的方法可以使用.NET不使用第三方库? 解决方案 这应该对您有用.它需要引用 c:\ windows \ system32 \ tlbinf32.dll ,但我假设这没关系,因为它不是第三方组件. Imports TLI 'from c:\windows\system32\tlbinf32.dll Dim reglib As TLI.TLIApplication = New TLI.TLIApplicationClass() Dim DLLPath As String = "c:\mycomponent.ocx" MsgBox(reglib.TypeLibInfoFromFile(DLLPath).GUID.ToString()) 其他解决方案 您必须使用Interop(P/
0 2024-04-16
编程技术问答社区
在COM中从C#到C的对象数组的返回
我正在使用com在C ++和C#之间进行通信. 我在C# 中有以下类 电子邮件地址 /// /// Email Address /// public class EmailAddress { /// /// SMTP Address /// [MarshalAs(UnmanagedType.BStr)] public string Address; /// /// Name /// [MarshalAs(UnmanagedType.BStr)] public string Name; } 邮箱 /// /// MailBox Entity /// public struct MailBoxE
0 2024-04-16
编程技术问答社区
如何从一个Win32 DLL或OCX中提取一个GUID
我们有一个.NET应用程序需要检查一个可能包含COM库的文件夹(DLL和OCX.).当我们遇到COM库时,我们需要完成的一件事就是从COM DLL或OCX中提取GUID . 是否有一种直接的方法可以使用.NET不使用第三方库? 解决方案 这应该对您有用.它需要引用 c:\ windows \ system32 \ tlbinf32.dll ,但我假设这没关系,因为它不是第三方组件. Imports TLI 'from c:\windows\system32\tlbinf32.dll Dim reglib As TLI.TLIApplication = New TLI.TLIApplicationClass() Dim DLLPath As String = "c:\mycomponent.ocx" MsgBox(reglib.TypeLibInfoFromFile(DLLPath).GUID.ToString()) 其他解决方案 您必须使用Interop(P/
0 2024-04-16
编程技术问答社区
AxAcroPDF吞下了钥匙,如何让它停下来?
AXACROPDF一旦焦点就会吞噬所有与密钥相关的事件,包括快捷键,按键等等.我添加了一个消息过滤器,并且也不会收到任何与密钥相关的消息.这是一个com组件,这可能是相关的吗? 在控件开始吞咽之前,有什么方法可以抓住这些? 解决方案 汉斯是正确的,杂技演员读取了两个孩子Acrord32流程,您无法直接从托管代码中访问. 我已经对此进行了试验,您有三个可行的选择: 您可以创建一个全局系统钩,然后查找并筛选/响应发送给您的孩子Acrord32 Windows的WM_SETFOCUS消息.您可以通过使用包装库来从C#内完成一些操作,例如这里的一个: http://www.codeproject.com/kb/system/wilsonsystemglobalhooks.aspx 您还需要识别正确的过程,因为您的应用程序可能有多个实例或Acrord32的其他实例.这是最确定性的解决方案,但是由于您的应用程序现在将过滤发送到存在的每个窗口的消息,所以我通常不建议这种
0 2024-04-16
编程技术问答社区
使用C#进行Catia V5自动化
我想用编程语言C#编写CATIA V5的宏/程序. 如何通过C#(和Visual Studio)访问CATIA应用程序.我搜索了一下,发现Catia提供了API,Microsoft Com Technologie为" Com-Languages"提供了API,例如C#&Python. 这就是我想象c#programm和catia之间的连接/相互作用: c# - .net com 正确吗? 另外:如何在Visual Studio中设置所有内容,以便我可以访问Catia API(和代码完成等) 解决方案 1)添加INFITF typelib库在引用中,它是CATIA应用程序的接口 2)将catia定义为全局变量 INFITF.Application CATIA; 3)将CATIA应用程序绑定到您的CATIA变量,如下语句 CATIA = (INFITF.Application)Marshal.GetActiveObject(
0 2024-04-16
编程技术问答社区
通过COM或在Java中直接集成消耗一个.Net库
我必须承认我上次在Java编程是高中的数据结构课.因此,请对此Java Noob. 我花了很多时间将C#com库放在工作中.该库在很大程度上依赖一些新的.NET技术(WPF是大型NET技术),因此将其转换为另一种语言并不是真正的选择.我已经测试了从C ++到COM界面消费该库的,这很简单.我还想证明可以从Java程序中使用相同的库. 因此,我遇到的问题是,我找不到一种免费甚至便宜的方法来使用Java的COM对象.我想另一个解决方案是找到一种直接集成库的方法.有人对实现这一目标的最佳方法有任何意见吗?我正在为我的Java环境使用Eclipse.以下是我的C#代码曝光的示例.感谢您提供的任何指导. //Example C# Object Code [Serializable, ComVisibleAttribute(true), Guid("Long Guid String"), ClassInterface(ClassInterfaceType.None), ComSo
0 2024-04-16
编程技术问答社区
将c#的匿名类对象暴露给COM(JavaScript)。
.NET 4.5+中是否有类/API允许将C#匿名类的实例视为com的后期对象?例如.我想这样做: webBrowser.Document.InvokeScript("TestMethod", new object[] { new { helloProperty = "Hello!", byeProperty = "Bye!" } }); 并在JavaScript中使用它: function TestMethod(obj) { alert(obj.helloProperty + ", " + obj.byeProperty); } 创建一个助手类以包裹匿名对象并通过 解决方案 我已经煮了一个助手课以实现这一目标,基于此出色的博客文章. 用法: webBrowser.Document.InvokeScript("TestMethod", new object[] { new Ref
0 2024-04-16
编程技术问答社区