Articles of 互操作

从Java调用Mono程序集

我有一个用C#编写的大型文本校对框架,我想写一个使用这套库的OpenOffice扩展。 我这样做的首选语言是Java。 因此,我需要一个方法来访问Java的.NET程序集(包括Windows和Linux )。 有没有办法从Java调用Mono程序集?

在C#程序中访问Linux文件系统

我正在编程一个C#应用程序,它检查上次在3个不同的服务器上修改文件,其中一个是linux。 作为一个不同的文件系统什么是可能的方法来检查系统上次修改文件的时间。 我完全有权修改服务器的范围,但我正在寻找一些创造性的解决scheme来解决这个问题。 提前致谢

C ++中的进程间通信

我有一个简单的c ++应用程序,在我的web应用程序的后端生成报告(简单的LAMP设置)。 问题是后端加载一个大约需要1.5GB内存的数据文件。 如果多个用户同时运行,这不会很好,所以我的想法是分成几个程序: 程序A是始终在服务器上运行的主要可执行文件,并且始终加载数据,并且可以实际运行报告。 程序B是从PHP衍生出来的,并且提出一个简单的请求,让程序A得到它所需要的信息,然后返回数据。 所以我的问题是这样的:什么是B让A做某事的好机制? 当A无关时应该如何工作? 我不是真的想要投票任务,或者轮转我的轮胎。

我的COM服务器需要一个作业队列吗?

我有一个COM EXE程序外服务器暴露了其接口之一的API。 这个API的function是发布url。 我的客户端将创buildCOM服务器的实例,并用新的URL调用这个API。 每当客户端需要发布一个URL,它将创build这个COM服务器的一个实例。 我是否需要在COM服务器中实现一个队列来跟踪客户端发布的所有URL,并确保没有丢失? 我想知道的是,如果每次创build一个COM对象,一个新的进程将被启动? 如果是这样的话,我想我不需要在服务器上实现作业队列。 但是如果只有一个实例存在内存中,客户端发布的作业/ URL可能会丢失。

使用Excel Interop打开Excel工作簿时出现问题

我正在编写一个C#表单应用程序来使用Excel Interop打开现有的Excel工作簿。 一切工作正常。 我可以读写很好。 在用户closuresC#应用程序之前,我不保存工作簿。 当我的程序正在运行并且用户意外地用Excel打开相同的工作簿时,会发生问题。 我得到的错误: 来自HRESULT的exception:0x800401A8 在这条线 范围excelRange = worksheet.UsedRange; 有没有办法locking工作簿,并不允许用户在我的程序运行时用Excel打开它? 谢谢

使用LoadLibraryEx()而不是CoCreateInstance()进行免注册组件使用的任何缺点?

我们的程序需要使用我们制作的COM服务器。 scheme如下:安装程序将在每次安装时将程序文件和COM服务器文件复制到相同的文件夹中。 目前我们使用regsvr32来注册COM服务器,但是这不是很好 – 如果我们开发另一个不相关的程序,也使用相同的COM服务器(可能是另一个版本),我们可能遇到问题 – 因为CLSID没有改变,服务器以后注册的将被这两个程序使用,并且第一个程序可能会发生故障。 所以我们需要无reg的COM。 我们可以使用清单,但是我已经和他们玩了一段时间,发现他们不适合在夜间使用。 我们也可以重写程序,而不是调用CoCreateInstance()它调用LoadLibraryEx() ,然后GetProcAddress()来定位DllGetClassObject() ,然后检索类工厂并使用它。 我立即看到一些缺点: 程序将依赖于确切的COM服务器文件名 额外的代码将不得不写入通常由Windowspipe理的东西 COM服务器将不得不在进程中,编组将永远不会被使用 而这些缺点通常可以显示阻塞,但在我们的具体情况下并不看好。 与CoCreateInstance()相比,使用LoadLibraryEx() / DllGetClassObject()有没有其他的缺点?

在MATLAB中的计算和渲染,任何其他的GUI

在耶路撒冷的希伯来大学有几个MATLAB应用程序,包括计算和用户界面。 由于UI变得越来越复杂,维护它变得非常困难。 我想要做的是在MATLAB中保持2D和3Dgraphics的计算和渲染,但是从其他位置控制整个UI。 我知道MATLAB导出一个COM接口,这是使用MATLAB计算,但我找不到一种方法来传递呈现数据(MATLAB绘图,基本上)通过它。 有没有办法做到这一点?

如果一些参数只是inttypes,ShellExecute不起作用

我有下面的代码是启动任何.exe(在这个例子中它的notepad.exe)。 但是这个代码不工作。 虽然没有编译问题。 [DllImport("shell32.dll", CharSet = CharSet.Auto)] static extern bool ShellExecuteEx(ref SHELLEXECUTEINFO lpExecInfo); public static void exev() { SHELLEXECUTEINFO info = new SHELLEXECUTEINFO(); info.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(info); info.lpVerb = "open"; info.lpFile = "c:\\windows\\notepad.exe"; info.nShow = 5; info.fMask = 0x440; info.hwnd = IntPtr.Zero; ShellExecuteEx(ref info); } } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct SHELLEXECUTEINFO { public int […]

在Windows中可以共享内存写入不同的进程(服务)吗?

我有两个应该共享数据的Windows服务,我打算使用SharedMemory(FileMapping)来达到这个目的。 另一个进程在用户空间中运行,也应该能够从该内存中读取。 那么,FileMapping是在一个服务中创build的,可以从“其他服务”和用户进程中读取。 但是,如果“其他服务”也可以写入这个内存(当然,当被一个互斥锁锁住的时候)。 但是,如果我只尝试从“其他服务”与FILE_MAP_WRITE一起使用OpenFileMapping,则返回ERROR_ACCESS_DENIED(5)(当然,FILE_MAP_READ有效)。 当我尝试获取互斥体时也是如此。 我假设下面的SSDLstring有什么问题,但我不知道我必须放在那里。 任何人都可以帮忙吗? 服务创buildFileMapping如下(错误检查ommitted更好的阅读,你可能已经看到他们的聚会): PSECURITY_DESCRIPTOR getSecurityDescriptor(const QString &sddl) { QString m_sddl = sddl; PSECURITY_DESCRIPTOR m_pSecDesc; if ((DWORD)(LOBYTE(LOWORD(GetVersion()))) >= 6) { // Found this – is this really required?? m_sddl += "S:(ML;;NW;;;ME)"; } if(!ConvertStringSecurityDescriptorToSecurityDescriptorW( (LPCWSTR)*m_sddl.utf16(), SDDL_REVISION_1, &m_pSecDesc, nullptr)) { return nullptr; } return m_pSecDesc; } bool publishData(…) { PSECURITY_DESCRIPTOR m_pSecDesc = […]

由tlbimp生成的COM Wrapper是与操作系统版本相关的

我们使用tlbimp.exe为wuapi.dll生成Interop dll。 这个互操作dll生成tlbimp.exe依赖于操作系统版本? 如果必须打包并安装在客户机上,是否需要打包wuapi.dll? 更多的上下文: C#代码来查找所有安装的Office更新 如何获取已安装的更新和修补程序的列表?