Tag: dll

来自C#的C ++:C ++函数(在DLL中)返回false,但C#认为它是真的!

我正在编写一个C#app,它在C ++ API中调用了一些函数。 我将C ++代码构建到DLL中,C#代码使用DllImport调用API。 (我使用.DEF文件作为C ++ DLL,因此我不需要extern“C”。) 到目前为止,API有一个function,目前绝对没有任何function: bool Foo() { return false; } 在C#中,我有以下内容: public class FooAPI { [DllImport(“Foo.dll”)] public static extern bool Foo(); } … bool b = FooAPI.Foo(); if (!b) { // Throw an exception } 我的问题是,由于某种原因,b总是评估为TRUE 。 我在if(!b)上有一个断点,调试器将其报告为’true’,与C ++函数返回的内容无关。 C#bool和C ++ bool一样吗? 虽然事实并非如此,但我仍然不知道如何将返回值设为’true’:) 任何人都可以帮我解决这个奇怪的差异吗? 提前致谢!

如何使用NLog的DLL

我正在尝试使用Nlog Refresh 1.0为类库项目实现一个简单的日志。 似乎nlog在从dll中实例化时不会创建日志文件。 还有其他方法吗? 我的配置文件如下所示: 我知道这个配置没有任何问题,因为它可以在exe项目中运行。 编辑:只是为了澄清:我无法访问使用我的DLL作为插件的调用程序。 调用程序实际上是outlook,它使用我的dll作为插件。 我想保留一个只与我的dll相关的日志,与outlook本身无关。

C#项目参考的问题

我有ac#solution,它由众多项目组成。 我有一个项目是我的基础组件,包含其他项目使用的所有常见信息。 所有其他项目都引用了基础组件。 我在我的baseassemblies中添加了一个dll引用,但所有其他项目都看不到它。 我怎样才能使其他项目可以看到baseassemblies正在引用的DLL? 我不想将DLL添加到所有项目中,因为这会破坏我的baseassemblies项目的目的。

将.exe项目转换为类库

我在visual studio 2010 Ultimate中有一个半大的C#.exe项目,我想将它转换为DLL类库。 有没有一种简单的方法可以做到这一点,而不涉及创建一个新的类库项目? 先谢谢。

加载并运行WPF DLL到另一个WPF exe

我的主要问题是我在标题中所说的。 WPF_APP1 – >我在排除App.xaml后创建了这个wpf项目的dll WPF_APP2 – >普通WPF exe。 需要运行上面的WPF_APP1 dll并使用reflection打开WPF_APP1 MainWindow表单。 为什么我说反思是 – WPF_APP2首先获取最新的WPF_APP1.dll然后打开所以无法添加dll的引用。 必须只使用reflection。 当我在cmd项目中使用上面的dll时没关系。 它打开CMD窗口,然后以窗口forms启动WPF_APP1 MainWindow 。 但是现在我需要在WPF_APP2中打开不在cmd中的窗口 。 请帮帮我。 CMD项目使用以下代码打开WPF_APP1 MainWindow。 static void Main(string[] args) { Thread t = new Thread(ThreadProc); t.SetApartmentState(ApartmentState.STA); t.IsBackground = true; t.Start(); Console.ReadLine(); } private static void ThreadProc() { string loc = new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName + “\\AutoUpdateTesting.dll”; Assembly dll […]

将dll库从Resource加载到当前域(在主exe文件中嵌入dll)

我正在尝试使用以下代码在运行时加载dll库,这样我就不必为用户提供大量的dll文件以及主要的可执行文件。 我已将所有dll文件作为嵌入式资源包含在内,并且在我已包含它们的参考部分中,并将CopyLocal属性设置为false。 但这里的问题是: 1.所有dll都被复制到Bin \ Debug文件夹 2.我收到了FileNotFoundException 。 我做了很多搜索以解决这些问题,最后我就在这里。 我在这里得到了类似的代码,但仍然无法做任何事情。 我应该怎么做才能防止这种exception……? 是否有更好的方法为Windows窗体应用程序(不是WPF)做同样的事情…… ?? using System; using System.Linq; using System.Windows.Forms; using System.Diagnostics; using System.Reflection; using System.Collections.Generic; using System.IO; namespace MyNameSpace { static class Program { static int cnt; static IDictionary assemblyDictionary; [STAThread] static void Main() { AppDomain.CurrentDomain.AssemblyResolve += OnResolveAssembly; if (cnt != 1) { cnt = […]

DLL的依赖对象/属性

这是我的代码: public class MyObject : DependencyObject { public int speedSimu { get { return (int)GetValue(speedSimuProperty); } set { SetValue(speedSimuProperty, value); } } public static readonly DependencyProperty speedSimuProperty = DependencyProperty.Register(“speedSimu”, typeof(int), typeof(MyObject), new PropertyMetadata(0)); public int Value { get; set; } } public class Timer : DependencyObject { public string description { get { return (string)GetValue(descriptionProperty); […]

了解IlMerge – 如何使用所有与之关联的dll打包可执行文件

我知道我不是第一个在Stack Overflow上提出这个问题的人,我相信我不会是最后一个。 但是,在花了几个小时研究如何做到这一点然后实际尝试做之后,我已经准备好放弃了。 我有一个构建为可执行文件的.NET Framework 4,C#,WinForms应用程序。 我依赖许多dll。 dll分为多个类别。 我编写的库没有自己的依赖 我编写的库依赖于我编写的其他库 我编写的库依赖于第三方dll 第三方独自一人 第三方dll与其他dll有自己的依赖关系 因此,在编译我的应用程序之后,我有一个带有可执行文件和大约15个dll的目录。 我想将所有dll打包成一个可执行文件,这样我就可以简单地分发一个可执行文件。 我知道IlMerge是通常建议使用的应用程序,但我很好奇是否有更容易使用的东西,更直观,适用于WinForms和WPF。

在.Net中使用VB6.dll

我正在使用的vb6代码可以将应用程序“注入”到正在运行的进程中。 实际上它相当于.Net的Reflection。 通过执行以下操作,我成功地通过.Net调用了.dll中的所有vb6函数: 在VB6中创建DLL 在Windows中注册DLL 添加注册的dll作为.Net winform应用程序的参考 创建.dll的实例并调用嵌入式函数。 但是,我没有运气调用下面的代码 – 同样的错误不断出现。 这是一张照片: 错误如下: 尝试读取或写入受保护的内存。 这通常表明其他内存已损坏。 VB6调用: Project1.Class1 vb6Test = new Project1.Class1(); vb6Test.InjPE(Application.ExecutablePath, File.ReadAllBytes(Application.ExecutablePath)); 注意:当我在vb6项目中使用上述调用时(当不从外部源调用它时),此代码完全正常。 导致错误的代码 Private Declare Sub CopyBytes Lib “MSVBVM60” Alias “__vbaCopyBytes” (ByVal Sz As Long, Dest As Any, Source As Any) Private Declare Function LoadLibraryA Lib “kernel32” (ByVal lpLibFileName As String) As Long […]

从.NET调用非托管代码

我正在尝试在我的c#程序中使用dll,但我似乎无法让它工作。 我已经制作了如下所示的测试应用程序。 返回值为0,但它实际上并不执行它应该执行的操作。 以下命令确实有效: rundll32 cmproxy.dll,SetProxy /source_filename proxy-1.txt /backup_filename roxy.bak /DialRasEntry NULL /TunnelRasEntry DSLVPN /Profile “C:\Documents and ettings\Administrator\Application Data\Microsoft\Network\Connections\Cm\dslvpn.cmp” 码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography; using System.Runtime.InteropServices; using System.Net; using WUApiLib; namespace nac { class Program { [DllImport(“cmproxy.dll”, CharSet = CharSet.Unicode)] static extern int SetProxy(string cmdLine); static void Main(string[] args) […]