Tag: dll

调试本机代码

我有一个C#服务,它调用最初用VC6编写的C DLL。 我试图检查DLL中有一个错误。 在尝试调试工作的噩梦之后,我最终将dll添加到包含C#服务的VS2005解决方案中,并添加了必要的_CRT_SECURE_NO_WARNINGS 。 使用’installutil.exe’工具注册该服务的调试版本。 通过调用System.Diagnostics.Debugger.Break();我可以让调试器在输入dll的行之前中断System.Diagnostics.Debugger.Break(); 。 我在网上发现了一些关于调试非托管代码的指令,并启用了“启用非托管代码调试”复选框,我还尝试打开选项 – >调试 – >本机’加载DLL导出’和’启用RPC调试’(即使它不是COM)。 我还将debug dll和.pdb复制到与服务相同的bin目录中。 但是,非托管代码没有进入我真正需要的代码。 更新 :我在DLL属性中找到了调试类型,并根据几个站点上的建议将其设置为“混合”,但无济于事。 UPDATE2 :我的项目现在将调试dll和pdb发送到与调试服务相同的目录。 仍然无法调试DLL。

如何安装Microsoft.SqlServer.Management.SqlParser?

当我在新机器上重建它时,我的c#installer项目出现了大量警告。 警告是他们正在寻找版本11.0.0.0的dll版本,其中只有10.0.0.0版本存在。 我发现这是由于安装了SQL Server的版本(SQL Server 2008 R2)。 大多数dll都是由于Share Management Objects软件包的版本不是版本11.0.0.0。 所以我安装了共享管理对象所需的SqlSysClrTypes.msi(x86)。 然后我安装了ShareManagementObjects.msi(x86)。 我是从这里得到的。 一些错误已经消失,但现在我得到2似乎引用了应该从SharedManagementObjects.msi安装的同一个dll。 它必须是可以获得/安装的东西,因为我目前有10.0.0.0版本。 错误是: 无法找到程序集“Microsoft.SqlServer.Smo.dll”的依赖项“MICROSOFT.SQLSERVER.MANAGEMENT.SQLPARSER”(签名=’89845DCD8080CC91’版本= ’11 .0.0.0’) 和: 无法找到程序集“Microsoft.SqlServer.Management.SmoMetadataProvider.dll”的依赖项“MICROSOFT.SQLSERVER.MANAGEMENT.SQLPARSER”(Signature =’89845DCD8080CC91’Version = ’11 .0.0.0’) 我读过的所有内容都表明Microsoft.sqlserver.management.sqlparser应该作为SharedManagementObjects.msi的一部分安装。 有什么我可以做到这个dll? 我需要安装其他东西,例如Native Client吗?

TlbImp.exe无法注册lib文件:“。dll不是有效的类型库”

.dll是FKAttend.dll附带生物识别设备的VB6.0 SDK。 .dll在VB6.0环境下工作正常。 但是,当尝试在具有VS.NET环境的另一台PC中注册它时,它会给出上述错误。 我们使用依赖性walker检查了.dll,它显示了以下错误。 如何在VS.Net环境中注册并使用此.dll?

将char *从C#字符串传递给C DLL

我需要在C#应用程序的DLL中使用C函数库。 我在使用char *参数调用DLL函数时遇到问题: C DLL: extern “C” __declspec(dllexport) int CopyFunc(char *, char *); int CopyFunc(char *dest, char *src) { strcpy(dest, src); return(strlen(src)); } C#app需要看起来像这样: [DllImport(“dork.dll”)] public static extern int CopyFunc(string dst, string src); int GetFuncVal(string source, string dest) { return(CopyFunc(dest,source)); } 我已经看到使用string或StringBuilder或IntPtr作为DLL函数原型所需的char *的替换的示例,但我无法使它们中的任何一个工作。 我得到的最常见的exception是PInvoke不平衡堆栈,因为函数调用与原型不匹配。 有一个简单的解决方案吗?

为单个方法引用一个大DLL

我想在C#中使用一个大类库-dll中的单个方法。 性能还是其他任何缺点? 我应该用reflection工具“读取”方法代码并将其复制粘贴到我的项目中吗? 更新:硬盘空间不是问题。 我的应用是web应用。

如何解决我的项目DLL和GAC中的DLL之间的歧义?

我目前正在研究ASP.NET MVC项目中的另一个问题 。 为了更好地理解代码库中发生的事情,我决定在我自己的项目中引用ASP.NET MVC源代码项目,方法是将解决方案文件添加到我的引用中。 当我这样做时,我开始收到HTTP 404错误。 我恰好在HandleErrorAttribute的OnException()方法上设置了断点,否则可能需要很长时间才能找到实际问题。 当我将鼠标hover在OnException方法调用中的filterContext参数上时,我得到此Exception描述: 类型’System.Web.Mvc.ViewMasterPage’是不明确的: 它可能来自assembly[GAC中的assembly路径] 或从assembly[我的项目中的assembly路径] GAC中的程序集就在那里,因为我安装了ASP.NET MVC 2.0 RC2版本 。 我如何才能最好地解决这种歧义?

在C#中处理来自非托管dll的exception

我有用C#编写的以下函数 public static string GetNominativeDeclension(string surnameNamePatronimic) { if(surnameNamePatronimic == null) throw new ArgumentNullException(“surnameNamePatronimic”); IntPtr[] ptrs = null; try { ptrs = StringsToIntPtrArray(surnameNamePatronimic); int resultLen = MaxResultBufSize; int err = decGetNominativePadeg(ptrs[0], ptrs[1], ref resultLen); ThrowException(err); return IntPtrToString(ptrs, resultLen); } catch { return surnameNamePatronimic; } finally { FreeIntPtr(ptrs); } } public static string GetNominativeDeclension(string surnameNamePatronimic) { if(surnameNamePatronimic […]

如何只分析一个类库?

我想分析一个类库项目的CPU使用情况,该项目使用VS2012编译成一个dll。 当我进入分析 – >启动性能向导时,我可以选择要分析的项目,但它只允许我分析可执行文件,因此我无法分析我的库。 如果我描述我的两个项目(一个是从我的库运行函数并显示一些输出的非常简单的表单),那么System.Windows.Forms.Application.Run占用我样本的97% – 我真的不关心表格的性能成本,它压倒了其他一切。 我怎样才能看到我的dll的性能数据?

在运行时更改.dll

我有一个庞大的应用程序,我的解决方案的一个项目报告。 我想在不构建项目的情况下添加新报告(更新报告),只需添加.dll文件。 我读到了关于Assembly和AppDomain ,但我不知道为新报告添加新的dll以及如何在运行时更新旧报告真的很好吗? 这是我的例子,它需要我的第一个dll,但第二次没有。 第一个dll – 总和,秒 – 扣除。 static void Main(string[] args) { try { //first domain AppDomain domain = AppDomain.CreateDomain(“MyDomain”); AssemblyDll asb1 = new AssemblyDll(); Console.WriteLine(asb1.AssemblyMethod(1)); AppDomain.Unload(domain); Console.ReadKey(); //second domain AppDomain newDomain = AppDomain.CreateDomain(“myNewDomain”); AssemblyDll asb2 = new AssemblyDll(); Console.WriteLine(asb2.AssemblyMethod(2)); AppDomain.Unload(newDomain); Console.ReadKey(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } public […]

C#项目设置“允许不安全的代码”的实际function是什么

我想知道C#项目设置“允许不安全代码”是否仅适用于项目本身的不安全C#代码,还是在链接本机C ++ DLL时是否需要设置此选项? 如何链接自身链接到本机DLL的托管DLL? 这个选项在引擎盖下真正做了什么?