Tag: interop

如何将System.Object 强制转换为System.Object

当我尝试将VFP9语言COM / DLL中的Array返回到我的.NET C#项目时,我收到一个System.Object[*]数组,我无法转换为System.Object[] (没有星号)。

IntPtr到字节数组和返回

引用如何从C#中的byte []获取IntPtr 我试图读取IntPtr引用到byte []然后再返回另一个IntPtr的数据。 指针正在引用从扫描仪设备捕获的图像,因此我还假设捕获此信息应放入字节数组中。 我也不确定Marshal.SizeOf()方法是否会返回IntPtr引用的数据大小或指针本身的大小。 我的问题是我收到错误“类型’System.Byte []’无法编组为非托管结构;无法计算有意义的大小或偏移量” IntPtr bmpptr = Twain.GlobalLock (hImage); try { byte[] _imageTemp = new byte[Marshal.SizeOf(bmpptr)]; Marshal.Copy(bmpptr, _imageTemp, 0, Marshal.SizeOf(bmpptr)); IntPtr unmanagedPointer = Marshal.AllocHGlobal( Marshal.SizeOf(_imageTemp)); try { Marshal.Copy(_imageTemp, 0, unmanagedPointer, Marshal.SizeOf(_imageTemp)); Gdip.SaveDIBAs( string.Format(“{0}\\{1}.{2}”, CaptureFolder, “Test”, “jpg”), unmanagedPointer, false); } finally { Marshal.FreeHGlobal(unmanagedPointer); } } catch (Exception e) { Scanner.control.Test = e.Message; […]

使用F1帮助(CHM格式)使用WPF

我已经在WPF应用程序上工作了一段时间,现在是时候将CHM格式的帮助文档附加到它上面了。 可惜! HelpProvider是在Winforms中显示CHM文件的标准方法,它已经神奇地消失了,并且在WPF中没有对应物。 我一直在尝试使用WindowsFormsHost来生成一个新的控件,所以我可以实际显示帮助,但实质上它只是抓住整个UI的控制权。 更多细节:我有一个我想要的菜单项,当点击时,打开CHM文件。 首先我设置了WindowsFormsHost …… host = new System.Windows.Forms.Integration.WindowsFormsHost(); helpForm = new System.Windows.Forms.Control(); host.Child = helpForm; host.Visibility = System.Windows.Visibility.Hidden; this.grid1.Children.Add(host); hp = new System.Windows.Forms.HelpProvider(); hp.HelpNamespace = “Somehelpfile.chm”; hp.SetHelpNavigator(helpForm, System.Windows.Forms.HelpNavigator.TableOfContents); 然后我说,瞧,揭示自己。 private void Help_Click(object sender, RoutedEventArgs e) { host.Visibility = Visibility.Visible; helpForm.Show(); hp.SetShowHelp(helpForm, true); } 我不确定从哪里开始。 当我显示helpForm时,它会模糊/覆盖现有的UI,我得到的是一个灰色的空WPF窗口,没有帮助文件。 任何接受者?

P / Invoke教程?

有谁知道在System.Runtime.InteropServices名称空间中有深入的好教程/电子书? 我刚刚阅读了本教程,了解如何使UAC屏蔽显示在一个按钮中,现在我真的想学习这个。 PS如何在Windows系统文件中查看是否存在在按钮中显示UAC屏蔽的方法?

将接口IDL文件转换为C#

我有一个IDL文件中定义的接口,我想在C#中使用。 有没有办法将IDL转换为C#中可用的东西?

在我创建WPF窗口时,Windows窗体窗口会更改其大小

我有一个System.Window.Forms.Form ,我处理每个按钮点击。 当我收到第一个事件时,我创建了一个新的WPF System.Windows.Window对象。 class WPF_Window : Window { } public partial class Form1 : Form { WPF_Window wnd = null; public Form1() { InitializeComponent(); } private void Form1_MouseClick(object sender, MouseEventArgs e) { if (wnd == null) { wnd = new WPF_Window(); } } } 在我的计算机上,此代码按预期工作,但如果我在另一台计算机(Windows 10)上运行它,当我单击Windows窗体窗口时更改其大小(减小其尺寸)。 这怎么可能? 我怎样才能避免这种行为?

编组.NETgenerics类型

这是一个C#程序,它在几种不同的类型上尝试Marshal.SizeOf : using System; using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential)] class AClass { } [StructLayout(LayoutKind.Sequential)] struct AStruct { } [StructLayout(LayoutKind.Sequential)] class B { AClass value; } [StructLayout(LayoutKind.Sequential)] class C { T value; } class Program { static void M(object o) { Console.WriteLine(Marshal.SizeOf(o)); } static void Main() { M(new AClass()); M(new AStruct()); M(new B()); M(new C()); M(new C()); } […]

如何迭代Excel c#的实例

我可以使用Marshal.GetActiveObject访问内存中的Excel实例。 但这始终返回最旧的现有实例。 我想迭代所有实例,并能够选择要链接到的实例。 任何人都可以帮助这个。

在C#中实现“out of proc”COM服务器需要做什么?

我正在尝试实现一个用C#编写的“out of proc”COM服务器。 我该怎么做呢? 我需要C#代码从我的主要C ++应用程序“out of proc”,因为我无法将.NET运行时加载到我的主进程空间 为什么?: 我的C ++代码位于一个DLL中,该DLL被加载到许多不同的客户EXE中,其中一些使用不同版本的.NET运行时。 由于只能有一个运行时加载到一个进程中,我最好的选择似乎是将我的C#代码放入另一个进程。

来自C#的Outlook 2007 – COMexception,TYPE_E_LIBNOTREGISTERED

我正在尝试制作一个可以打开新的Outlook 2007消息的程序。 我引用了COM选项卡Microsoft Outlook 12.0 ObjectLibrary。 这些项目出现在VS的参考文献中: Microsoft.Office.Core Microsoft.Office.Inerop.Outlook 现在我尝试调用以下代码: var _outlookInstance = new Microsoft.Office.Interop.Outlook.Application(); var _message = (OutlookApp.MailItem)_outlookInstance.CreateItem(OutlookApp.OlItemType.olMailItem); 其中OutlookApp == Microsoft.Office.Interop.Outlook命名空间。 在调用第二行列表时,我不断收到此exception:( InvalidCastException) 无法将“Microsoft.Office.Interop.Outlook.ApplicationClass”类型的COM对象强制转换为接口类型“Microsoft.Office.Interop.Outlook._Application”。 此操作失败,因为由于以下错误,对IID为“{00063001-0000-0000-C000-000000000046}”的接口的COM组件的QueryInterface调用失败:库未注册。 (HRESULT的例外情况:0x8002801D(TYPE_E_LIBNOTREGISTERED))。 该代码在我的其他工作站上适用于Outlook 2003。 我会很感激任何想法如何解决它。