Tag: interop

将System.Drawing.Bitmap转换为stdole.StdPicture

我当前有一个System.Drawing.Bitmap,我需要将其转换为stdole.StdPicture。 目前我正在使用: var pic = (stdole.StdPicture)Microsoft.VisualBasic.Compatibility.VB6.Support.ImageToIPicture (MyDLL.Properties.Resources.Img); // this is a System.Drawing.Bitmap 但我得到一个编译器警告: 警告’Microsoft.VisualBasic.Compatibility.VB6.Support.ImageToIPicture(System.Drawing.Image)’已过时:’“Microsoft.VisualBasic.Compatibility。*类已过时,仅在32位进程中受支持.http:// go。 microsoft.com/fwlink/?linkid=160862 那么使用什么呢? 我还没找到另一个解决方案……

如何获取进程使用的所有内存地址空间?

我需要知道进程使用的所有内存地址空间。 稍后将扫描存储空间以定位过程中的值并识别它们的位置/地址。 我目前的过程是通过其(基址+内存大小)获取每个模块的基址。 我正在一个已知地址已知值的进程上测试它。 当我查找该特定地址时,我得到了我期望的值。 但是,当我扫描(我相信是)进程使用的所有地址空间时,我无法在任何地方找到该值。 我知道在0x0CF8DC38和0x0CF8DDDC处存在数值“4143000”。 当我调用ReadMemoryBytes(module,module.BaseAddress,4,(IntPtr)(0x0CF8DC38))时,我返回字节( 152,55,63,0 )。 当我调用BitConverter.GetBytes(4143000)时,我得到了相同的字节集。 当我在该进程上使用不同的内存扫描程序时,我会在这些地址处找到该值。 但是,当我扫描“已知地址”时,我在任何地方都找不到这个值。 看起来我的代码甚至找不到进程使用的那些地址。 因此,我的问题是双重的: 如何在此过程中找到这些地址? 我担心我可能正在处理系统内存中的绝对地址与进程中的相对地址。 我这样做了吗? 。 // (in the calling method) foreach (ProcessModule module in process.Modules) { ParameterizedThreadStart pst = new ParameterizedThreadStart(p => SearchModule(module, value)); Thread t = new Thread(pst); t.Start(); } private unsafe void SearchModule(ProcessModule module, string value) { Process process […]

在C#和VBA之间进行通信

应我老板的要求,我创建了一小组脚本,用于定期监控某些设备和进程的状态。 随后使用相对复杂的VBA模块处理此信息,该模块收集所有信息,应用公式,设置范围并生成图表等。 但是有两个问题:我是业余程序员,所以我的VBA例程非常低效。 这对我来说不是一个大问题(我只是在跑步时起床喝咖啡),但对于其他用户来说,这可能很麻烦,因为不知道为什么这么长时间。 我想要一个进度的图形表示。 应用程序的配置是通过文本文件完成的。 我想提供一个体面的GUI来设置配置。 为了实现这一点,我正在寻找一种让我的C#WinForms应用程序与我的VBA应用程序通信的方法。 我知道如何从我的C#应用​​程序运行VBA例程,但我不知道如何让它们实时进行操作。 以下是我特别想要实现的两件事: 我已经有一个在VBA例程结束时保存的日志文件。 而不是我想要将log / debugging-messages实时发送到我的C#应用​​程序 (不仅仅是在应用程序的末尾),因此消息可以在我的GUI应用程序中显示,因为它们是由VBA应用程序生成的。 我还希望VBA应用程序将有关实时进度的信息发送到我的GUI应用程序,以便在GUI应用程序中创建图形化进度条 。 我已经考虑过通过标准输出进行通信。 我知道如何使用C#/ .Net从标准输出中读取,但我不确定如何使用VBA写入StdOut流。 我相信很多人会指出我想要实现的是愚蠢和老式(或完全没必要),但作为业余程序员,对我来说这似乎是一个非常具有挑战性和有趣的项目,可以教我一件事或两个。

Windows Phone 8(仅限C ++) – 可以访问设备制造商吗?

目前正在使用纯C ++ / Direct3D开发Windows Phone 8应用程序。 我们现在需要访问设备制造商名称,但它似乎只能在C#下使用,根据我的研究,这种类型的应用程序无法访问它。 此页面列出了我想要使用的一些调用: http : //msdn.microsoft.com/en-us/library/windowsphone/develop/microsoft.phone.info.devicestatus(v = vs.105).aspx 。 // If only I could call this line from C++ DeviceStatus.DeviceManufacturer; 无论如何都可以获得这些信息,而无需将应用程序重构为允许基本应用程序为C#的XAML / C ++混合应用程序。

COM互操作对象在一个项目中抛出InvalidCastException但在其他项目中不抛出

我有一个我在测试C#解决方案中导入的COM对象。 一切正常,并继续这样做。 然后我在我的实际解决方案中导入了相同的COM对象,并且作为测试实现了与测试项目中完全相同的行 。 当我运行真正的项目时,我得到一个InvalidCastException 无法将“CTWebReport.WebReportCOMClass”类型的COM对象强制转换为接口类型“CTWebReport.IWebReportCOM”。 此操作失败,因为对于具有IID“{5DFA18E8-4E71-4ADC-A812-6B166C242561}”的接口的COM组件上的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULTexception:0x80004002(E_NOINTERFACE)) 。 我在整个系统中搜索了对interop和com库的每个引用,这包括我能找到的所有bin和obj文件夹。 除了原始的COM库之外,我将它们全部删除,并且为了更好的措施清理了我的回收站。 没有区别,完全相同的情况。 测试项目工程,实际项目没有。 编辑 似乎COM在winforms应用程序中工作,但不在我的类librar中(由asp.net mvc web applicatoin使用)。 我不知道接下来该做什么。 建议?

如何正确地将char *从非托管DLL返回到C#?

function签名: char * errMessage(int err); 我的代码: [的DllImport( “api.dll”)] internal static extern char [] errMessage(int err); … char [] message = errMessage(err); 这会返回一个错误: 无法封送“返回值”:无效的托管/非托管类型组合。 我究竟做错了什么? 谢谢你的帮助。

程序集生成失败 – 引用程序集“Interop.Office”没有强名称

我有一个WPF 4项目,用于与VS2010中生成的word文档进行交互,以及一个win form User Control项目,用于将word应用程序托管到其中。 和其他com dlls。 所有的com dlls都被引用到我的主要wpf应用程序中。 我想发布我的项目,以便我可以在另一台机器上安装并执行自动更新,我得到错误:“程序集生成失败 – 引用程序集’Interop.Office’没有强名称。” 每个COM Dll的错误。 一个DLL引用(Interop.word.dll,interop.office.dll,interop.VBIDE.dll),所有这些dll也引用并用于我的wpf代码。 我发现Strong Signed Assemblies链接有相同的问题,但它没有解决问题。

C#到VB6 COM事件(“对象或类不支持事件集”)

真的把这头发拉出来…… 我有一个C#项目,其接口定义为: /* Externally Accessible API */ [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface ISerial { [DispId(1)] bool Startup(); [DispId(2)] bool Shutdown(); [DispId(3)] bool UserInput_FloorButton(int floor_number); [DispId(4)] bool Initialize(); } /* Externally Accesssible Event API */ [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] public interface ISerialEvent { [DispId(5)] void DataEvent(); } [ComSourceInterfaces(typeof(ISerialEvent), typeof(ISerial))] [ClassInterface(ClassInterfaceType.None)] public class SerialIface : ISerial { public delegate void DataEvent(); public […]

C ++中字符串的L前缀

我有一个静态库。 该库定义了以下function int WriteData(LPTSTR s) 调用该函数的示例是 LPTSTR s = (LPTSTR) L”Test Data”; int n = WriteData(s); WriteData在成功时返回0,在失败时返回-1。 我正在编写动态DLL来导出此函数。 int TestFun(LPTSTR lpData) { return WriteData(lpData); } C ++测试应用程序结果 LPTSTR s = (LPTSTR) L”Test Data”; TestFun(s); //OK return 0 LPTSTR s = (LPTSTR) “Test Data”; TestFun(s); //Fail return -1 我必须从ac#应用程序调用它。 我假设我的DLL-Import签名是: [DllImport(“Test.dll”)] private static extern int TestFun(String […]

C#=为什么Excel进程没有结束?

我有以下代码: private bool IsMousetrapFile(string path) { logger.Log(validateFileMessage + path); Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); Excel.Workbooks workbooks = xlApp.Workbooks; Excel.Workbook xlWorkBook = workbooks.Open(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); Excel.Sheets worksheets = (Excel.Sheets)xlWorkBook.Worksheets; Excel.Worksheet ws = null; foreach (string sheet in expectedWorksheets) { try { ws = (Excel.Worksheet)worksheets.get_Item(sheet); […]