Tag: com

从DLL中调用C#中的C ++函数 – 奇怪的参数

我有一个用C ++写的函数和下一个标题: void EncodeFromBufferIN(void* bufferIN,int bufferINSize, unsigned char* &bufferOUT, int &bufferOUTSize); 我已经编辑了像这样的.h和.cpp文件,以便能够通过在C#中导入DLL来调用该函数: **EncodeFromBufferIN.h** extern “C” { __declspec(dllexport) void EncodeFromBufferIN(void* bufferIN, int bufferINSize, unsigned char* &bufferOUT, int &bufferOUTSize); } **EncodeFromBufferIN.cpp** extern void EncodeFromBufferIN(void* bufferIN, int bufferINSize, unsigned char* &bufferOUT, int &bufferOUTSize){ // stuff to be done } 但现在我的问题是我不知道如何在C#中调用该函数。 我在C#中添加了下一个代码,但不确定如何将参数传递给函数。 [DllImport(“QASEncoder.dll”)] unsafe public static extern void EncodeFromBufferIN(void* […]

将一个相当简单的C#类库转换为COM对象?

这是我的问题:我必须从一个返回复杂数据类型的经典ASP页面调用带有安全头的Web服务。 由于有关第三方工具的各种原因,它必须是经典的ASP。 我们决定创建一个外部dll来做这个 – 我做了(在c#中),所以它返回一个数据集(Something ASP可以理解)。 但是现在我需要将该函数公开给ASP页面。 因为这是经典的ASP,我认为唯一直接的方法是将此类库公开为COM对象。 我需要知道完成此任务的最简单和最简单的方法。 我该怎么处理我的dll? 我之前从未创建过COM对象。 有人说我的class级必须是静态的,我不能有一个构造函数。 这是真的? 有人可以为我布置步骤吗? 救命! (O: 编辑:这个特定问题现在已经解决,但罗伯特罗斯尼指出我无法对经典ASP中的DataSet做任何事情。 这让我在这里发布了第二个关于实现XmlTextWriter的问题 – 罗伯特,如果你看到这个我觉得你真的可以帮忙!

需要从interop dll中查找COM DLL

我在ac#项目中有一个Interop dll,但是我无法找到与之关联的相应COM dll。 请让我知道,如何从其interop dll中找出实际的COM dll。

在C#或方法中使用语句会更好吗? 这适用于外部(COM)对象吗?

什么是更好的,using指令,或者在完成对象时使用dispose指令? using(FileStream fileStream = new FileStream( “logs/myapp.log”, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using(StreamReader streamReader = new StreamReader(fileStream)) { this.textBoxLogs.Text = streamReader.ReadToEnd(); } } 另一方面,当我正在处理System.Net.Mail时,我被告知我需要对象的Dispose()来释放任何杂散锁。 有没有一致的指导? 在给定对象的给定情况下,如何判断哪些更合适?

用于托管进程内服务器的自定义COM类工厂

我正在寻找以MkParseDisplayName/BindToObject 方式为托管类库实现自定义COM激活逻辑。 这样,从VB创建对象可能如下所示: obj = GetObject(“clsid:12341234-1234-1234-1234-123412341234:!UniqueObjectId”) 这对于一个进程外服务器(使用CoRegisterClassObject )来说不是问题。 但是,对于进程内服务器,我需要更改DllGetClassObject的实现,这通常由mscoree.dll提供。 这有可能吗? 我看到的唯一其他选项是创建一个C#单例对象作为类工厂并在其上实现IParseDisplayName 。 从理论上讲,这样的单例也可以使用CoRegisterClassObject(CLSCTX_INPROC_SERVER)注册自定义的IClassFactory类对象,但CoRegisterClassObject(CLSCTX_INPROC_SERVER) ,单例本身都需要首先实例化。

System.String 和System.String C#的区别

编辑 :我知道C#相当于For Each server As String In servers是foreach(var item in servers) For Each server As String In servers中的foreach(var item in servers)但是由于GetOPCServers返回对象,因此应该将其转换为可迭代类型。 我正在使用COM库开发应用程序。 由于64bit导致问题,我的目标CPU x86。 除GetOPCServers()外,所有方法都按预期工作。 虽然使用相同的dll的Visual Basic代码不会导致问题,但C#抛出System.InvalidCastException说: A first chance exception of type ‘System.InvalidCastException’ occurred in System.Core.dll Additional information: ‘System.String[*]’ türündeki nesne ‘System.String[]’ türüne atılamadı. 为我的土耳其语OS提供错误消息道歉。 System.String[*]类型中的对象无法分配给System.String[] System.String[*]和System.String[]之间的差异是什么? 使用相同dll的VB代码无例外地运行 Public Class OpcInfo Dim servers As […]

将字符缓冲区从.NET传递给COM并将其更新回来

我有从C#调用以下COM方法,它在提供的缓冲区pchText (不一定是零终止)中返回一个字符串,并在pcch复制字符数: HRESULT Next([in, out] long* pcch, [out, size_is(*pcch)] OLECHAR* pchText); 如何为互操作定义C#签名? 到目前为止,我试过这个: void Next(ref int pcch, [MarshalAs(UnmanagedType.LPWStr, SizeParamIndex = 0)] System.Text.StringBuilder pchText); 它似乎工作,但我不确定SizeParamIndex是否对StringBuilder有任何影响。

如何使用c#连接到Internet Explorer的打开窗口?

你可以在C#程序中使用COM / OLE连接到正在运行的Internet Explorer实例吗? 理想情况下,我想找到在IE中打开的所有网页的url。

从C#调用某些Excel VBA宏时出错

我一直在努力和搜索这个问题无济于事…我有一些测试宏在从Excel运行时工作得很好但是从C#调用时失败或不工作,使用互操作… 我正在使用MS Visual Studio 2012(在64位Windows 7上)创建一个控制台应用程序,它将调用用Excel 2007编写的VBA宏TestMacro()。 下面是调用宏的C#代码:(我基本上复制了在这里完成的操作从Visual C#.NET使用自动化运行Office宏 ) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Configuration; using System.Reflection; using Excel = Microsoft.Office.Interop.Excel; using Microsoft.Office.Core; namespace C#_Macro_Wrapper { class Program { static void Main(string[] args) { RunVBATest(); } public static void RunVBATest() { System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCulture; System.Threading.Thread.CurrentThread.CurrentCulture = new […]

COMexception0x800A11F9 – 无法激活应用程序

我有一个C#2.0(WinForms)项目,我尝试激活word 2003(在系统上安装了word)。 通过使用以下代码: private void ActivateWord() { this.Activate(); if (m_WordDocument != null) { try { m_WordDocument.Activate(); if (m_WordDocument.Application != null) { m_WordDocument.Application.Visible = true; m_WordDocument.Application.Activate(); } } catch (COMException comEx) { ShowError(this, comEx.Message, false); } } } 当我的应用程序执行m_WordDocument.Application.Activate()时,我收到一个COMexception0x800A11F9。 Stacktrace: “System.Runtime.InteropServices.COMException (0x800A11F9): Cannot activate application at Word.ApplicationClass.Activate() at Roxit.SquitXO.GUI.DocumentCreatie.frmSelectVeld.ActivateWord()” 可能是造成这个问题的原因是什么?