Tag: dll

引用System.Windows.Automation

我想通过BugSlayer尝试一些可用的自动化东西,但我对参考文献有疑问。 我正在试图弄清楚如何在visual studio中引用System.Windows.Automation库。 我安装了.NET Framework v3.5和VS 2008,但UIAutomationClient和System.Windows.Automation都没有在引用的.NET或COM选项卡中显示为引用选项。 如果我通过命令提示符导航到C:\WINDOWS\assembly\GAC_MSIL\UIAutomationClient\3.0.0.0__31bf3856ad364e35我可以看到dll,但如果我浏览到Visual Studio中的程序集,我实际上无法访问dll。 我是否忽略了在项目中包含此内容的简单方法?

如何在VS2008中的项目目标3.5中引用框架4.0 dll

我在VS2010中使用4.0框架创建了一个DLL(是的,它是完整的4.0,而不是客户端配置文件)。 我想在VS2008项目中引用它(这意味着我无法将引用项目重新定位到4.0,即使我想这样做)也不能将该项目升级到VS2010。 我理解为什么在3.5个项目中引用4.0’项目’存在问题,但我不明白为什么我在3.5项目中引用4.0 dll时会遇到问题。 而且就我所知,这可能不是问题所在,但我似乎无法想到它可能是什么。 我正在尝试使用Fasterflect(http://fasterflect.codeplex.com/),它严重依赖于我的3.5项目中的4.0function(同样,我的公司还没准备好为VS2010支付这笔钱,所以我无法改变那)。 一开始似乎一切正常,直到我尝试编译然后关于Fasterflect程序集的错误没有被弹出的错误。 所以我下载了实际的源代码,签名,重新编译它,并引用了我新签名的程序集。 问题是现在它显示警告符号并说: 已解决的文件具有错误的图像,没有元数据,或者无法访问。 无法加载文件或程序集“C:…. \ Fasterflect.dll”或其依赖项之一。 此程序集由比当前加载的运行时更新的运行时构建,无法加载。 我尝试按照这里建议的答案: http : //social.msdn.microsoft.com/Forums/en/clr/thread/36b1a209-55d5-4323-91dc-0919ba2e1d03 。 但是,当我这样做时,我收到另一条错误消息: 找不到元素’supportedRuntime’的架构信息。 C:…. \ DynamicSql \ App.config中 我似乎无法想出那个错误。 当然有一些方法让我在VS2008中使用这个DLL?

试图用C#创建数学输入面板

如何在C#中创建数学输入面板? 我试图将它放入一个dll并调用它但它立即关闭。 #include #include #include “micaut.h” #include “micaut_i.c” extern “C” __declspec(dllexport) int run() { CComPtr g_spMIC; // Math Input Control HRESULT hr = CoInitialize(NULL); hr = g_spMIC.CoCreateInstance(CLSID_MathInputControl); hr = g_spMIC->EnableExtendedButtons(VARIANT_TRUE); hr = g_spMIC->Show(); return hr; } 我在C#中调用了dll函数,面板弹出但立即消失。 有什么建议?

程序集绑定和重定向

我有一个引用DLL的EXE – 对于这个例子,我将其称为TestDLL.dll 。 EXE是用C#编写的,DLL是用VB .Net编写的。 我创建了DLL的演示程序集版本 – 例如 – TestDLL.dll版本1.0.0.0。 我想编译EXE并引用演示版DLL(1.0.0.0)。 之后 – 我希望EXE使用相同的DLL,但我将放入任何版本的GAC。 为此,我将DLL引用的“Copy Local”属性设置为FALSE 。 我的目标是例如 – 在编译之后,我将使用汇编版本2.1.6.0放入GAC TestDLL.dll,并且EXE将使用汇编重定向绑定找到它。 为此,我使用了配置文件。 我用这个链接来创建它: http://msdn.microsoft.com/en-us/library/7wd6ex19(v=vs.71).aspx 所以我的配置文件看起来像这样: 问题是,在完成所有这些之后,我运行EXE并在访问dll时,我得到了一个着名的错误: System.IO.FileNotFoundException:无法加载文件或程序集’TestDLL,Version = 1.0.0.0,Culture = neutral, PublicKeyToken = 9d8162944bd6fdc7’或其依赖项之一。 该系统找不到指定的文件。 文件名:’TestDLL,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 9d8162944bd6fdc7′ 意思是,EXE找不到我引用的原始DLL 。 我知道我可以“引用”GAC或使用reflection,但我不想 – 因为这个EXE应该只是这样工作。 有谁知道问题是什么以及如何解决? 谢谢

如何使用C#和.NET的C ++库?

我的问题与DLL如何导出C ++类和generics方法(没有C#并行的wrt C ++语言特性)密切相关。 我相信你可以通过引用DLL并使用DLLImport来调用C#中的extern “C”块内的函数。 但是你可以实例化一个模板化的C ++类型吗? 如果C ++类型在C#中不支持那些疯狂的东西怎么办? 是否存在RFC或C#规范的相关部分? 谢谢… 编辑:我现在偶然发现P / Invoke应该是有价值的,但我仍然在寻找关于此的规范或标准。

为什么我不应该有一个单片实用程序库?

我们有一些常见的库(C#,但我想这不是平台或语言特定的),让我们称它们为A,B和C.库A引用了B和C,库B引用了第三方DLL,库C独立。 三个独立项目背后的想法是每个库都有不同的function,但随着时间的推移,库A变成了一个或多或少“全能”的公共库,大多数客户端应用程序都引用它。 只有少数应用程序在没有A的情况下引用B和/或C. 我们正在尝试改进我们的源代码控制约定,我们要做的一件事是正确地标记和释放这些库DLL,因此客户端项目文件可以指向代码的静态版本而不是始终更改的主干。 这有点令人费解 – 例如,一个引用A和B的客户端项目.A本身引用B,因此技术上有两个来自客户端项目的B引用。 因此,显而易见的事情似乎是将所有内容组合到一个具有组织良好的命名空间的公共/实用程序库中。 正如我所说,几乎每个客户端应用程序都引用了这些库中的一个,所以谁在乎呢? 这样做不会引入第三方依赖的任何不良情况,并且我们所有的目标机器都是内部的并且维护大致相同的环境/软件配置。 这似乎太容易解决了,所以我想我至少得到第二个意见。 另一种方法是使用GAC并强烈签署/版本化所有内容。 我在这里错过任何捕获物吗?

在运行时更新应用程序的库(DLL)?

有没有办法在C#中运行应用程序时更新DLL? 例如,如果存在具有如下函数的DLL: void write() { Console.WriteLine(“LALALA”); } 它在一个线程中调用,在调用之间有1秒的hibernate时间。 现在,我写了新版本: void write() { Console.WriteLine(“LA LA LA\n”); } 我可以在运行时使用这个新DLL更新旧的DLL吗? 重要的是我的APP一直在运行,没有计量器…但我想更新库是个例外。 我错了吗?

RegAsm regfile开关没有提供与codebase开关相同的输出

好吧,我知道这是非常具体的,但我在整个工作日都失去了它所以我真的需要一些合理的解释,所以我的老板和我的妻子不会解雇我 根据MSDN: /regfile开关“为程序集生成指定的.reg文件” /codebase开关“在注册表中创建一个Codebase条目,指定程序集的文件路径” 我猜这是做同样事情的两种不同方式。 事实是,我错了: 方法1 C:\>”C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe” “C:\SERVER.dll” /regfile Registry script ‘C:\SERVER.reg’ generated successfully Reg文件输出: REGEDIT4 [HKEY_CLASSES_ROOT\xfeed.server.X] @=”SERVER.XLS” [HKEY_CLASSES_ROOT\xfeed.server.X\CLSID] @=”{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}” [HKEY_CLASSES_ROOT\CLSID\{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}] @=”SERVER.XLS” [HKEY_CLASSES_ROOT\CLSID\{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}\InprocServer32] @=”mscoree.dll” “ThreadingModel”=”Both” “Class”=”SERVER.XLS” “Assembly”=”SERVER, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6e3de07ee666a5f5” “RuntimeVersion”=”v2.0.50727” [HKEY_CLASSES_ROOT\CLSID\{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}\InprocServer32\1.0.0.0] “Class”=”SERVER.XLS” “Assembly”=”SERVER, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6e3de07ee666a5f5” “RuntimeVersion”=”v2.0.50727″ [HKEY_CLASSES_ROOT\CLSID\{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}\ProgId] @=”xfeed.server.X” [HKEY_CLASSES_ROOT\CLSID\{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}\Implemented Categories\ {62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}] 方法2 但是当我直接执行codebase switch命令而不是使用reg文件时,在regsitry中受影响的密钥是不同的(并且工作,与前面的输出相反) C:\>”C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe” “C:\SERVER.dll” /codebase Types registered successfully 注册表ouptut与代码库: Windows […]

来自本机C ++加载的DLL的C#表单

这个问题来自这个线程: Native C ++通过代理C ++管理的dll使用C#dll 简而言之,我通过DLL将(我的)C#扩展加载到本机进程中。 扩展程序需要显示一个表单,以便用户可以控制它。 我正在使用标准的.NET表单,没有第三方图书馆或任何东西,我的表单没有出现。 更糟糕的是,它挂起了目标进程。 它没有使用任何CPU,所以我感觉它等待某些function返回,但从来没有。 同样令人感兴趣的是弹出“初始化方法”消息框,但不弹出“测试”消息框。 我已经测试了我能想到的所有东西(STAthread,threads,DisableThreadLibraryCalls,加上不同的代码位置),每一个星期日。 我倾向于认为它是Win32互操作的一些模糊细节,但我找不到任何似乎会导致这些症状的东西。 你们其中一位专家可以查看我的代码并指出问题所在吗? /// /// Provides entry points for native code /// internal static class UnmanagedExports { [UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.StdCall)] public delegate int SendRecv([MarshalAs(UnmanagedType.SafeArray)]byte[] ByteArray, UInt64 Len); [STAThread] [DllExport(“Initialize”, CallingConvention.StdCall)] public static int Initialize(IntPtr hInstance, SendRecv Send, SendRecv Recv) { return DLLinterface.Initialize(hInstance, Send, Recv); } [DllExport(“Terminate”, […]

在DLL中将DLL作为嵌入式资源包含在WPF项目中

我正在关注http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx 我已将WPFToolkit.Extended.dll添加到我的解决方案中,并将其Build Action设置为Embedded Resource。 在App.OnStartup(StartupEventArgs e)中,我有以下代码: AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { String resourceName = “AssemblyLoadingAndReflection.” + new AssemblyName(args.Name).Name + “.dll”; String assemblyName = Assembly.GetExecutingAssembly().FullName; Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName); using (stream) { Byte[] assemblyData = new Byte[stream.Length]; stream.Read(assemblyData, 0, assemblyData.Length); return Assembly.Load(assemblyData); } }; 调试器会两次触发此代码块。 第一次: resourceName is “AssemblyLoadingAndReflection.StatusUtil.resources.dll” assemblyName is “StatusUtil, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null” […]