Tag: interop

处理Microsoft Office Outlook 2003/2007电子邮件

摘要 我一直在接收特定工作相关域的电子邮件,并且我想根据这些电子邮件消息中提供的信息构建数据库。 这些消息是关于世界各地计算机科学行业的一些需求和要求的工作相关项目。 我想以自动方式解析或分析这些电子邮件,这样我就可以将重复信息发送到数据库中,并构建一个类似商业智能的数据库,让我随时了解最需要的专业领域。 技术环境 O / S: Microsoft Windows 7 Pro Office: Microsoft Office 2007 Pro 是的,我可以使用.NET 4.0! =) (我很乐意根据需要提供更多信息。) 问题 如何通过COM Interop程序集访问PST文件或Outlook个人数据文件? 有什么对象用于实例化Outlook PST文件或其他中的每个电子邮件? 解析电子邮件的最佳方法是什么? 感谢任何能分享她/他的盐的人,以帮助我实现我的目标。 这对我来说非常有意义。

尝试使用interop将C ++转换为C#

我有一个用C ++调用EGL的程序。 我想在C#中进行相同的调用,但在C#中似乎没有相同的概念。 当执行上下文进入C ++ EGL代码时,我收到读/写访问被拒绝错误。 这是我试图转换为C#的C ++程序中的代码: PropertySet^ surfaceCreationProperties = ref new PropertySet(); surfaceCreationProperties->Insert(ref new String(EGLNativeWindowTypeProperty), somethingOtherThanAWindow); mEglSurface = eglCreateWindowSurface(mEglDisplay, config, reinterpret_cast(surfaceCreationProperties), surfaceAttributes)); 我有一个C#类,它将C#EGL调用转换为C ++调用。 我相信C ++是不受管理的,但我不知道如何告诉你。 C#类看起来像这样: public static IntPtr CreateWindowSurface(IntPtr dpy, IntPtr config, IntPtr win, int[] attrib_list) { IntPtr retValue; unsafe { fixed (int* p_attrib_list = attrib_list) { retValue = Delegates.peglCreateWindowSurface(dpy, config, […]

将带有字节数组的结构传递给interop-ed方法

我有一种情况,我必须将结构传递给C方法(在我的C#文件中声明为extern)。 然而,这个结构非常复杂。 我已经成功地使用了AllocHGlobal的方法,但我想了解是否可以通过仅传递对结构的引用来使它以这种方式工作。 [StructLayout(LayoutKind.Sequential)] struct lgLcdBitmapHeader { public Formats Format; } [StructLayout(LayoutKind.Explicit)] struct lgLcdBitmap { [FieldOffset(0)] public lgLcdBitmapHeader hdr; [FieldOffset(0)] public lgLcdBitmap160x43x1 bmp_mono; [FieldOffset(0)] public lgLcdBitmapQVGAx32 bmp_qvga32; } [StructLayout(LayoutKind.Sequential)] struct lgLcdBitmap160x43x1 : IDisposable { /// /// Format = LGLCD_BMP_FORMAT_160x43x1 /// public lgLcdBitmapHeader hdr; /// /// byte array of size LGLCD_BMP_WIDTH * LGLCD_BMP_HEIGHT, use AllocHGlobal to […]

是否可以将LPWSTR从C ++ DLL返回到C#app

C ++函数定义就是这样 __declspec(dllexport) LPWSTR __stdcall GetErrorString(int errCode); 我用C#这样称呼它 [DllImport(“DLLTest.dll”)] public static extern string GetErrorString(int errCode); static void Main(string[] args) { string result = GetErrorString(5); } 我得到System.Runtime.InteropServices.SEHException类型的未处理exception 我甚至不确定C ++ DLL是否可以尝试将LPWSTR返回给C#… 谢谢。

System.Runtime.InteropServices.COMException:检索具有CLSID {58968145-CF05-4341-995F-2EE093F6ABA3}的组件的COM类工厂失败

我正在运行ac#应用程序,我正在使用DSOFile dll。 该DLL在项目中引用。 我能够在我的开发机器上运行exe。 但是当我在另一台机器上运行exe时,我得到了 未处理的exception:System.Runtime.InteropServices.COMException:由于以下错误,检索具有CLSID {58968145-CF05-4341-995F-2EE093F6ABA3}的组件的COM类工厂失败:80040154未注册类(HRESULTexception:0x80040154(REGDB_E_CLASSNOTREG) ))。 不知道为什么我得到这个。 用Google搜索并将平台目标设置为x86但是我仍然遇到此问题。 任何帮助都会很棒。

Interop COM(-isch)接口封送会在简单调用时导致AccessViotlationException

我正在尝试为本机C ++插件标准编写托管互操作库。 此本机C ++库使用C​​OM兼容的接口设计。 但是,它不会做任何类注册的东西。 与COM一样,所有接口都派生自IUnknown(称为FUnknown,但无论如何都是相同的3种方法)。 我编写了一个简单的C ++控制台应用程序,它可以加载我的托管测试插件,并通过导出的方法检索初始(根)接口(对象工厂模式 – 与com类似)。 我使用第三方DllExport代码属性实现 – 这似乎工作正常。 C ++测试应用程序使用LoadLibrary / GetProcAddress并成功检索对该接口的引用。 我可以在托管导出函数中设置断点,并按预期命中。 然后C ++测试应用程序在IUnknown(部分)接口上调用AddRef,它返回2 – 正如预期的那样。 请注意,我的托管接口定义(counter-part)不是从IUnknown派生的 – 或者包含这些方法。 我想说这意味着托管编组魔法已经介入并提供了CCW。 然后C ++测试应用程序调用工厂接口上的一个简单方法 – 一个只返回一个int32 – 并且也到达托管实现(断点被命中),但是当该方法返回时抛出一个AccessViolationException – 在托管中的某处 – 无管理的过渡。 class IPluginFactory : public FUnknown { public: // removed other methods before and after this one virtual int32 PLUGIN_API […]

从C#引用VBA程序集的运行时错误

我有一个C#.NET 3.5项目,遗憾的是它依赖于几个VB6 ActiveX控件。 到目前为止,我已经能够愉快地访问ActiveX控件中定义的数据容器和方法,只需添加对项目中控件的引用并正常引用它们即可。 然而,当我不得不调用一个返回VBA.Collection的方法时,我遇到了麻烦。 我的代码将编译没有问题,但在运行时我收到以下错误: 无法加载文件或程序集“Interop.VBA,Version = 6.0.0.0,Culture = neutral,PublicKeyToken = null”或其依赖项之一。 该系统找不到指定的文件。 我在项目中引用了Interop.VBA(版本6.0.0.0)和Interop.VBRUN(版本6.0.0.0),有什么想法吗? 我不能给出具体的代码,它包含在NDA中。 但是,这里是来自对象浏览器的示例代码,其名称已更改为保护不那么无辜;) 我可以从我的代码中引用以下属性和方法: ReturnConstants GoodMethod(); string prop1 ReturnConstants prop2 如果我尝试可以调用此方法,我在运行时收到上面的错误消息: Collection BadMethod(); 因此调用返回导致问题的VBA.Collection的方法。 这些是我无法控制的第三方控件,它们不会在.net中重写 编辑:出于兴趣,我去了VS2010尝试了一个快速的虚拟项目,并按预期工作完美,所以看起来这可能是VS2012的一个问题。 我看过一些post暗示2012年没有正确创建VBA的interops,所以我会去看看我能在那里找到什么……

检测Outlook安装并动态加载INterop.Outlook

我在VS2010中有一个Windows窗体应用程序。 它引用了Interop.Outlook(2003)。 然后,我重新安装了Windows XP和VS2010,但没有安装Outlook。 现在,该项目没有编译。 我想这个,如果Outlook没有安装在我的程序执行的机器上,我的应用程序将无法工作。 我需要知道我是否检测到Outlook已安装,并动态加载Interop.Outlook.dll(用于在.NET 4中使用Outlook PIA或Embedded Interop类型)。 如果计算机安装了Outlook(2003,2007,2010,可能需要代码来检测版本并执行Outlook版本的兼容性),则应用程序可以正常运行Outlook。 如果计算机未安装Outlook,则应用程序可以正常运行而无需functionOutlook。 关于它的任何示例源代码或goog模式和实践?

从C ++ DLL(使用“Dllimport”从C#加载)调用C#方法/函数

在单个标题中恢复它有点困难,所以在这里我的情况。 我正在构建一个加载C ++库的C#应用​​程序。 我从该C ++ DLL调用函数。 但我也喜欢我的C ++ DLL从C#应用程序调用函数(即导入/运行它)… 这里有一段代码使它更全面: // I’m importing functions from my native code [DllImport(dllFilePath, CallingConvention = CallingConvention.Cdecl)] public static extern int returnIntValue(int value); [DllImport(dllFilePath, CallingConvention = CallingConvention.Cdecl)] public static extern int returnIntArrValueAt(int[] values, int index); // Here is the kind of code it should be // [DllImport(dllFilePath, CallingConvention = CallingConvention.Cdecl)] […]

使用Interop从DataGrid导出到Excel太慢了

我即将编写一个WPF应用程序,它从数据库中获取数据并在DataGrid中显示它。 然后使用按钮创建Excel文件并填充数据。 如20000行的大量数量,Excel中的填充需要太长时间。 有人知道为什么吗? 谢谢 private void copyAlltoClipboard() { Clipboard.Clear(); DataGrid1.SelectAllCells(); DataGrid1.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader; ApplicationCommands.Copy.Execute(null, DataGrid1); } private void Button_Click(object sender, RoutedEventArgs e) { copyAlltoClipboard(); Excel.Application xlexcel; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlexcel = new Excel.Application(); xlexcel.Visible = true; xlWorkBook = xlexcel.Workbooks.Add(misValue); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); Excel.Range CR = (Excel.Range)xlWorkSheet.Cells[1, 1]; CR.Select(); xlWorkSheet.PasteSpecial(CR, […]