Tag: dll

为’Any CPU’构建p4api.net.dll

本周早些时候,当我尝试使用p4api.net.dll时,我遇到了第一个BadImageFormatException。 原来我的假设是我可以使用它的64位版本而且p4bridge.dll不正确! 在我的调查中,我注意到我有一个警告: warning MSB3270: There was a mismatch between the processor architecture of the project being built “MSIL” and the processor architecture of the reference “p4api.net, Version=2014.3.100.9144, Culture=neutral, PublicKeyToken=f6b9b9d036c873e1, processorArchitecture=AMD64”, “AMD64” 我了解到这意味着我使用的.dll指定使用64位,而不是使用Any-CPU构建。 虽然我们可以将项目更改为特定的x64,但我还是被要求调查是否仍然可以将其作为平台不可知的方式保留。 我仍然是p4api.net的新手并且不得不处理这种依赖,但我的理解是,如果我可以将p4api.net.dll构建为“任何CPU”,警告就会消失,我只需要做一些魔法,以确保使用正确的p4bridge.dll取决于我在项目中定义的CurrentPlatform。 我下载并编译了p4api.net源代码并尝试指定任何CPU,但它不起作用。 现在它说该架构设置为x86,我仍然得到类似的MSB3270错误 – 现在是x86。 但是,我没有使用p4api.net解决方案得到这样的警告,因此它似乎没有我所知道的任何平台依赖性。 但是,如果我在CorFlags.exe上使用CorFlags.exe ,它肯定会提供特定于平台的PE / 32BIT标志。 所以我的问题: 有没有人知道是否有可能为任何CPU构建p4api.net? 如果做不到这一点,我需要做些什么来检查哪些(如果有的话)平台依赖存在会妨碍我为任何CPU构建p4api.net.dll? 如果上面的答案都没有,我可能会有新的问题,但是当我到达那里时会越过那座桥! 🙂 提前感谢任何帮助/想法。

在后台使用非托管库时无法更新WPF GUI

尝试使用Emgu从网络摄像头捕获图像时,我遇到了一个问题。 为了完成这项任务,Emgu使用非托管opencv库。 所以问题是我无法从System.Timers.Timer Elapsed事件更新我的GUI(WPF图像控件)。 我知道它在不同的线程中运行,但是,嘿,这就是我使用Dispatcher的原因。 这是我第一次无法使用Dispatcher。 获取InvalidOperationException,“调用线程无法访问此对象,因为另一个线程拥有它。”。 我花了一整天时间寻找解决方案,但仍无法解决问题。 任何想法为什么会发生? webcam.OnNewFrame += newBitmapSource => this.imgCaptured.Dispatcher.Invoke ( new Action(delegate { this.imgCaptured.Source = newBitmapSource; }), DispatcherPriority.Background ); Stack Trace的最后一件事是:System.Windows.Threading.Dispatcher.VerifyAccess() 但是,如果我调用Dispatcher.CheckAccess(),则返回true。 更新: 最后我自己发现了:必须在UI Thread上创建BitmapSource。 似乎它不能使用此对象。

C#.Net Dll引用依赖项

我编写了一个DLL库MyLIB.dll (版本1.0.0 ),它依赖于第三方DLL库OtherLIB.dll (版本1.0.0 )。 库可以在NuGet上使用OtherLIB.dll ,我将通过NuGet包管理器将其添加到MyLIB.dll项目中。 现在让我们说我正在编写一个新的应用程序,比如MyAspNetMvcApp ,我正在通过NuGet向它添加MyLIB.dll (版本1.0.0 )。 它会自动添加OtherLIB.dll (版本1.0.0 ),因为它依赖于它。 一切都很好,但…… 一个月后,发布了新版本的OtherLIB.dll – 版本1.0.1 。 我正在通过NuGet更新它。 现在,我的ASP.NET MVC应用程序停止工作,因为MyLIB.dll引发了exception。 它期望版本1.0.0中的 OtherLIB.dll ,但已经使用了更新的版本。 在MyLIB.dll项目引用中,我可以看到OtherLIB.dll的 “特定版本”标志被设置为“False”,所以我不知道这里发生了什么…… 除了在web.config文件中提供程序集绑定之外,是否有可能以其他方式解决此问题? 我如何为MyLIB.dll添加对OtherLIB.dll的引用,以便在将OtherLIB.dll更新为较新版本时不会出现exception?

使用ILMerge合并.dll文件无法正常工作

首先,我不确定这是否是ILMerge的问题,但我无法将.dll文件合并到我的应用程序中。 我在命令行上尝试了这个: ilmerge /target:winexe /out:test.exe MyApp.exe lib1.dll lib2.dll lib3.dll 我收到以下错误,我不知道这意味着什么: MyApp的元数据中报告了错误。 与D:\ C#\ source \ bin \ ReleaseMyApp.exe关联的pdb已过期。 我顺便使用最新版本(2.10.526.0),但是我不能让它工作,我真的需要一些帮助。 上述错误意味着什么,我该如何解决?

这可能是由C#.NET编写Win32 .dll文件吗?

这可能是由C#.NET编写Win32 .dll文件吗? 如果是的话,我可以在哪里找到一些教程? 如果不是,那么您对Win32 .DLLs的建议是什么? 谢谢。

强制我的应用程序使用特定版本的DLL

我有申请需要使用dll(也是我写的),由政府机构独立validation。 我们计划很少修改dll,因为需要重新validation。 我想防止我的应用程序无意中修改了这个dll。 有没有办法为dll创建哈希代码并将我的应用程序设置为仅使用此特定版本。 这样,如果有人修改了dll的一些代码,当我们构建并运行应用程序时,应用程序将无法加载dll(因为它已经更改)。 有什么想法/建议吗? 干杯, 詹姆士

如何将C#List中创建的对象的地址传递给C ++ DLL?

我一直在谷歌寻找我的问题的一些答案,但不太明白我发现了什么。 在使用System.IO读取一些文本文件后,我有一些在C#List中创建和存储的对象。 之后,我想将每个对象的引用(使用const指针)发送到C ++ dll中的内部类,以便它可以使用它们来计算某些算法。 以下是我正在做的一些简单示例(不是实际代码): C#类: [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] public class SimpleClass { [MarshalAs(UnmanagedType.LPStr)] public string Name; public float Length; } 与相应的C结构: struct SimpleClass { const char* Name; float Length; }; 存储在 List ItemList; 解析一些文本文件后。 然后调用以下dll函数: C#: [DllImport(“SimpleDLL”)] public static extern void AddSimpleReference(SimpleClass inSimple); C: void AddSimpleReference(const SimpleClass* inSimple) { g_Vector.push_back(inSimple); // g_Vector […]

Visual Studio 2010:如何引用具有第三方依赖性的C#.Net类库项目

这可能是一个非常基本的问题,但我没有找到有关项目引用如何在Visual Studio中工作的任何详细信息。 我有一个Visual Studio 2010 C#解决方案,其中包含一个MainApp项目和一个内部带有第三方程序集的C#类库项目。 当从MainApp项目引用类库项目时,我应该只添加项目引用还是需要在类库项目中添加对第三方程序集的引用? 在某些情况下,如果我在MainApp项目中只有类库项目引用,似乎第三方程序集未正确加载,尽管在构建完整解决方案时所有DLL文件(包括第三方DLL)都显示在输出文件夹中。 编辑:我发布了一个更具体的问题,因为一般的答案在我的案例中没有帮助: 如何使用IronPython引用自包含的C#类库项目(Visual Studio 2010)

嵌入.dll – 用C#解决程序集

我有一个.dll我试图将其作为资源嵌入可执行文件中。 以下两个问题有些帮助,但不是完整的帮助: 将组件嵌入另一个组件中 这似乎不像书面那样有效; args.Name不能像写的一样使用,但是即使它被修复了,程序仍然会抱怨缺少.dll,表明程序集没有正确加载。 将DLL嵌入已编译的可执行文件中 以及其中一个答案中的链接: Embed managed dlls easily in a .NET assembly 但是,我的项目中没有任何“App.xaml *”文件 – 我没有使用WPF; 我正在使用WinForms作为我的可执行文件(由于可执行文件的性质,更改不是一个真正的选项)。 因此,我正在寻找一套完整的指令,用于将类库作为资源嵌入可执行文件中,并从资源中加载.dll,而不需要嵌入式资源之外的.dll文件。 例如,简单地将“App.xaml”文件添加到WinForms项目是否可行,或者是否存在我不知道的负面交互? 谢谢。 编辑:这是我目前正在使用的: /// /// Stores the very few things that need to be global. /// static class AssemblyResolver { /// /// Call in the static constructor of the startup class. /// public static […]

创建一个简单的c#dll并从ruby访问它

我正在尝试制作我的第一个c#dll。 我希望能够通过win32API从ruby中调用它的方法/函数。 我做了这个dll: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ClassLibrary1 { public class Class1 { public int PropA = 10; public void Multiply(Int32 myFactor) { PropA *= myFactor; } } } 我用Visual Studio 2010编译它并得到了我的ClassLibrary1.dll文件。 现在对于ruby部分,我试过这个: f = “c:/path_to_file/ClassLibrary1.dll” mult = Win32API.new(f,”Multiply”,[“I”],”I”) 但是,我收到以下错误: Error: #<RuntimeError: (eval):0:in `initialize': GetProcAddress: Multiply or MultiplyA 说实话,我从来没有创建过dll,也没有c#的经验。 我只是想开始吧。 […]