Tag: interop

MS Access互操作 – 数据导入

我正在使用exe来将SQL导出到Access,我们不想使用DTS,因为我们有多个客户端,每个客户端都导出不同的视图,并且设置和维护DTS包的开销太大。 *编辑:这个过程每晚都为许多客户自动化,因此整个过程必须在存储过程中的游标内启动和控制。 这是因为必须按导出的每个项目过滤数据。 我已经尝试了很多方法将数据从SQL中导入Access,最有希望的是使用Access互操作并运行 doCmd.TransferDatabase(Access.AcDataTransferType.acImport… 我遇到了一个问题,我从视图导入,并手动运行导入,似乎视图没有开始足够快地返回数据,因此访问弹出一个MessageBox对话框,说它已超时。 我认为这也发生在互操作中,但因为它是隐藏的,所以方法永远不会返回! 有什么方法可以阻止弹出这个消息,或者增加导入命令的超时时间? 我目前的攻击计划是将视图展平为一个表,然后从该表导入,然后删除展平的表。 很高兴有任何建议如何解决这个问题。 编辑: 关于我在做什么的进一步信息: 我们有多个客户,每个客户都有一个标准的数据模型。 其中一个“模块”是访问导出器(sproc)。 它读取要从参数表导出然后导出的视图。 视图按项目过滤,并为每个项目创建一个访问文件(每个视图都有项目字段) 我们正在运行SQL 2005并且没有快速转向SQL 2005,我们可能会在几个月后跳到2008年。 然后我们有一个模块执行作业,它在每个数据库上执行配置的模块。 在此模块执行中有许多导入/导出/其他作业,并且访问导出器必须能够适合此框架。 所以我需要一个通用的SQL – > Access导出器,可以通过我们的参数框架进行配置。 目前sproc调用我写的exe,我的exe通过interop打开访问,我知道这对服务器不好但是模块执行被写入所以一次只执行一个模块,所以程序永远不会运行更多一次只有一个例子。

使用C#.NET将文本替换为MS Word 2007中的粗体文本

我想在MS Word 2007文档中搜索所有粗体文本 ,并将每个粗体“文本”替换为“” 喜欢下面的伪代码 foreach boldText in WordDocument { string replacedText = “”; WordDocument.replace(boldText ,replacedText ); } WordDocument.save();

为什么从.net调用的本机代码会从本机程序中调用它而产生不同的结果?

我们有一个本地库,我们用它来为我们执行安全相关的任务。 我们编写了一个互操作库,以便我们可以在.NET中使用它。 我们有两个测试应用程序,第一个应用程序是用C ++编写的(非托管),第二个是用C#编写的。 它们生成与本机库完全相同的调用序列,但会产生不同的结果。 我迷路了,在.NET导入定义中找不到任何明显的错误。 我已经把它搞砸了,所以我只使用一个非常简单的界面。 我正在寻找为什么从.NET环境调用本机库可能会影响结果的想法。 编辑:我没有深入了解库,所以我不能提供很多关于本机代码的function。 我知道它确实维持(热潮)线程。 库的另一部分(用于标识应用程序是否在VM上运行)也表现出相同的行为。 这不一定相关。 我在C ++ / CLI中编写了另一个测试应用程序,因为它比使用C#更容易使用本机库,并且它也提供与C#相同的结果。

在C#中从外部应用程序获取UI文本

是否可以从C#中的外部应用程序获取UI文本。 特别是,有没有办法从第三方编写的外部Win32应用程序读取标签中的Unicode文本(我认为它是一个普通的Windows标签控件)? 文本是可见的,但在UI中不能通过鼠标选择。 我假设有一些可访问性API(例如用于屏幕阅读器)允许这样做。 编辑:目前正在寻找使用类似管理间谍应用程序的东西,但仍然会欣赏任何其他线索。

如何在没有互操作程序集的情况下创建Microsoft Jet(Access)数据库?

我需要在不使用ADOX互操作程序集的情况下创建访问(mdb)数据库。 如何才能做到这一点?

从C#访问COM vtable

有没有办法在C#中访问COM对象的虚方法表以获取函数的地址?

如何从C ++ DLL动态加载C#dll

我有一个C ++应用程序。 这支持用户的C ++插件DLL,它将动态加载这些DLL,然后能够动态创建和使用用户的类型。 这些用户类型派生自主应用程序核心库中定义的基本类型和接口,因此我将用户的对象作为指向基类的指针,并调用用户的虚函数以使其发生魔力。 现在我想扩展插件DLL以允许托管DLL(我主要关心C#)。 我想在C#插件DLL中发生所有相同的魔术。 我怎样才能动态加载这些dll,有些我认为我目前使用的win32的LoadLibrary会对托管DLL感到满意。 我无法在编译/链接时访问这些库,它们来自用户。 在我加载库之后,不幸的是我怀疑COM在我将来作为调用派生函数的方式。 可能我可以使用我一直在阅读的CLI / C ++包装器,但我在这里非常缺乏经验,并希望得到任何建议或指向相应文章的链接。

从非托管代码传递指针

我有一个导入C dll的C#项目,dll有这个function: int primary_read_serial(int handle, int *return_code, int *serial, int length); 我想访问serial参数。 我实际上已经让它返回串行参数的一个字符,但我不确定我在做什么,并且想要了解发生了什么,当然让它工作。 所以,我非常确定正在访问dll,没有指针的其他函数工作正常。 我该如何处理指针? 我必须编组吗? 也许我必须有一个固定的地方把数据呢? 解释会很棒。 谢谢! 理查德

无法从其他STA线程调用从STAThread创建的COM对象

我是COM的新手,试图了解STA和MTA之间的区别。 我试图创建一个示例,该示例将显示COM可以管理在STA中创建的对象的调用,该对象不是线程安全的。 这里的MyCalcServer类是使用ATL Simple Object创建的。 使用的设置与本文中的相同: 线程模型:公寓 聚合:没有 界面:自定义 MyCalcServer COM对象用于另一个C#项目,它是: class Program { [STAThread] static void Main(string[] args) { MyCOMLib.MyCalcServer instance = new MyCOMLib.MyCalcServer(); string output1; instance.ChangeValue(“Gant”, out output1); Console.WriteLine(output1); Thread t1 = new Thread(() => { while (true) { string output; instance.ChangeValue(“Gant”, out output); Console.WriteLine(output); } }); t1.SetApartmentState(ApartmentState.STA); t1.Start(); // : // also […]

如何在C#中固定指向托管对象的指针?

非托管代码调用我的函数。 在第一个函数中,我应该将指针传递给我的托管对象。 有时候稍后我的其他一些函数会被调用与指针之一相同的指针。 我应该取消引用它并使用它来执行一些计算,然后如果不需要处理它。 为了简化故事,我需要固定该对象,以便GC在我处理它之前不会移动它。 如何在C#中做到这一点? 提前致谢。