天道酬勤,学无止境

阴影复制,以及从任意文件夹加载的混合 C# 和 C++ DLL(Shadow Copying, and mixed C# and C++ DLLs loading from arbitrary folders)

问题

我有一个 VS 2005 C# 项目,它使用一个特殊的插件文件夹来加载额外的 DLL(用作资产转换过程中的节点)。

我在这个文件夹中混合了 C# 和 C++ DLL。

我遇到的问题是,启用 Shadow Copying 时,C++ DLL 拒绝使用 Assembly.LoadFrom 加载。 我尝试创建自定义应用程序域,并使用 Load,但这也失败了。

最后,我尝试以 byte[] 数据的形式读取 DLL 并在其上使用 Load - 同样,只有 C# DLL 会以这种方式工作,并出现错误“附加信息:无法验证的代码策略检查失败。(来自 HRESULT 的异常:0x80131402) ”。

网上的一篇文章提示我在构建该特定 DLL 时尝试使用 /clr:safe,但是由于 Microsoft 代码中的数千个错误,它根本无法构建......(显然)

禁用卷影复制后,LoadFrom 对所有 DLL 都可以正常工作。 该应用程序本身就是一个 Maya 插件,它曾经适用于 Maya 8.5,但在 2008 / 2009 中失败(如果启用了 Shadow Copy)。

我们真的更喜欢使用 Shadow Copying,因为它可以在应用程序运行时防止 DLL 文件锁定(插件文件夹存储在 Perforce 可以在应用程序运行时更新的位置)。

关于如何说服 Shadow Copying 使用自定义文件夹和 C#/C++ DLL 的混合而没有这些问题的任何想法?

回答1

听起来像是信任问题。 尝试获取 Fusion 日志(请参阅此博客文章)。 您的 C++ DLL 无法验证,因为它们不是用/clr:safe编译的,因此它们只能以完全信任的方式加载。 据推测,在进行卷影复制时,下载缓存位置没有完全信任。

如果这是一个仅限开发的问题,运行caspol -s可能会让您启动并运行。

回答2

Assembly.Load(byte[] ...) 明确禁止不可验证的(混合模式)程序集。 您可以在 Microsoft Connect 上检查问题。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 使用 Visual Studio 和 TFS 进行 Agile C++ 开发和测试
    使用 Visual Studio 和 TFS 进行 Agile C++ 开发和测试 致力于在 Visual C++ 中构建的应用程序的开发人员和测试人员。作为一名开发人员,如果能够提高工作效率,编写较高质量的代码,并能够根据需要重写代码以改善体系结构,而不必担心妨碍任何内容,岂不是很好?作为一名测试人员,是否希望花更少的时间来编写和维护测试,以便有时间进行其他测试活动?使用 Visual Studio 2010 和 Team Foundation Server (TFS) 2010。使用 TFS 2010 来进行版本控制、工作跟踪、持续集成、代码覆盖率收集和报告。作为开发人员,以下是目标:无构建破坏无回归自信地进行重构自信地修改体系结构通过测试驱动开发 (TDD) 来推动设计当然,质量是这些目标背后的重要“原因”。实现这些目标后,开发人员的生活将比其不是开发人员时更加高效和有趣。对于我们的测试人员,我将仅关注 Agile 测试人员的一个方面:编写自动化测试。测试人员编写自动化测试时,他们的目标包括无回归、接受驱动开发以及收集和报告代码覆盖率。当然,我们的测试人员所做的不仅仅是编写自动化测试。我们的测试人员负责收集代码覆盖率,因为我们希望代码覆盖率数字包含所有测试结果,而不仅仅是单元测试结果(稍后会对此进行详细介绍)。在本文中,我将介绍我们团队用以实现此处所述目标的不同工具和技术
  • 微软特权访问管理
    2018-2022是私有云混合云在中国最火热的时代,私有云将在中国从摸索走向成熟阶段,随着云技术的火热,下一个企业必须要思考的将是信息安全的问题,现在企业都在导入云计算技术,建置更多的信息应用系统以从中获取信息化带来的价值。那么随着带来的一个隐患就是,管理员要管理的基础架构和应用系统数量越来越多,这时候管理员账户就变的很重要了,如何保证管理员账户能够安全,如果保证管理员账户的管理操作可控,可记录,如果保证云资源管理员和租户虚机的隐私问题,将是企业信息化接下来必须要考虑的安全点老王之前做企业咨询实施的时候发现国内企业信息化,发现有一些现象,企业IT部门的管理员,可以很轻而易举的获得多个高权限的管理账号,有些企业信息项目外包出去,外包人员需要的管理员账户,做完项目也不回收。导致了Domain Admins组有大量的用户,这其实是极大的一个安全隐患,越多的高权限账户就有越多的风险,Hacker或者内部恶意管理员只要随便破解找到一个管理员的账号密码,就可以利用这个账号访问所有的域内系统,如果没有虚拟机保护机制,还可以利用此账户去窥探任意租户虚拟机的内容。针对于这些云技术时代产生的安全隐患,微软在Windows Server 2016开始,正式引入 Privileged Access Management 特权访问管理的概念,PAM在老王看来,它不是指的某一个特定的技术
  • MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题
    这个话题要从哪里说起呢。博主小白一个,最近调试程序时(WIN-MSVC)连一些基本问题都没弄懂,本着遇见问题一定要解决的原则,下面来说下MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题:一 动态库DLL 静态库LIBMSVC中工程只有三种类型,即LIB库,又叫做静态库;DLL库又叫做动态库;EXE,可执行程序;其中EXE调用LIB库或者DLL库,三者关系如上。DLL库定义 动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。 一般生成动态库后会产生两个文件即DLL文件和对应DLL文件的LIB文件,其中DLL文件存储了具体的程序,而LIB文件只是这些程序的一个目录或者说是索引。当调用DLL文件时,需要在LINKER选项加载对应DLL的LIB文件。LIB库定义 静态链接库就是.lib文件,库中的代码最后需要连接到可执行文件中去,所以静态连接的可执行文件一般比较大一些。 静态链接库不同于动态链接库(*.dll)
  • 混合模式程序集未加载本机 C++ pdbs 的符号(Mixed mode assembly not loading symbol for native C++ pdbs)
    问题 我正在使用 C++/CLI 中的混合模式程序集。 在混合模式组装中成功时,所有托管模式组装的 pdb 都会被加载,但是即使本机 pdb 的信息显示在“模块”窗格中(即在 VS 调试->Windows->模块中),本机 dll 和 pdb 也不会被加载。 我正在使用本机 dll 并在 C++/CLI 代码中以混合程序集调用其导出函数。 在这里,函数被成功调用,但未加载本机 pdb 符号,本机代码中的所有断点都显示为空心圆圈,工具提示说没有为此加载任何符号。 我已经完成了所有操作,将 pdb 放在当前目录中启动托管进程的位置; 删除所有 obj 和 debug 文件夹并同时重新编译每个项目; 我什至使用了 ChkMatch 实用程序,它显示 Exe 中的符号和相应的 pdb 匹配。 从托管(C++/LCI 混合模式)代码调用时,有什么方法可以启用本机代码的断点? 问候, 乌斯曼 回答1 混合模式调试可能会碰上和错过,主要是错过。 首先检查您是否确实启用了混合模式调试。 在 C# 项目中,它是项目 + 属性、调试、启用非托管代码调试复选框。 接下来,不为 64 位进程启用混合模式调试。 如果您在 64 位操作系统上运行,请确保强制 .exe 在 32 位模式下运行。 项目 + 属性,构建选项卡,平台目标 = x86。 接下来验证调试器在何处查找 .pdb 文件。 在 Debug +
  • 将图标作为资源嵌入到 WPF 应用程序中(Embed Icons into WPF Application as Resource)
    问题 我正在尝试将一个图标嵌入到我的 WPF 应用程序中,以便我可以使用以下代码将其拉出以用作 Windows 7 JumpList 中的图标: newScene.IconResourcePath = System.Reflection.Assembly.GetEntryAssembly().Location; newScene.IconResourceIndex = 0; 我已经使用以下方法让它工作了:http://dennisdel.com/?p=38 但是,这似乎不是最好的方法,似乎应该有一种更简单的方法将图标资源嵌入到我的应用程序中,同时仍然在我的程序的应用程序属性中选中“图标和清单”选项。 我尝试了很多方法,包括将图标构建操作设置为资源和嵌入资源,但是每次我在资源编辑器中打开我的 .exe 时,图标都不会出现。 有什么建议么? 回答1 Visual Studio 没有提供从 MSBuild 任务执行 Win32 资源编译器的方法,也没有用于创建资源的嵌入式功能创建原始资源。 因此,您的选择是: 如链接文章中所述,“手动”创建 .res 文件,或添加构建任务,以便您可以从 .csproj 调用 Win32 资源编译器 首先,我将解释可以存在于 .exe 或 .dll 文件中的五种不同“资源”之间的区别,包括 JumpList 所需的“Win32 资源”。 然后
  • 5分钟实现漂亮的CSS加载动画,纯CSS实现加载动画
    目录 1 视频 2 知识点 2.1 CSS calc() 函数 2.2 CSS var() 函数 2.3 CSS3 box-shadow 属性 2.4 CSS3 box-sizing 属性 2.5 CSS3 filter(滤镜) 属性 2.6 CSS3动画(animation) 3 参考代码 3.1 HTML 3.2 CSS 1 视频 视频地址:https://www.bilibili.com/video/BV1D5411H7Tc 5分钟实现漂亮的加载动画,CSS实现加载动画 2 知识点 2.1 CSS calc() 函数 CSS calc() 函数用于动态计算长度值。 语法 calc(expression) 值 描述 expression 必须,一个数学表达式,结果将采用运算后的返回值。 需要注意的是,运算符前后都需要保留一个空格,例如:width: calc(100% - 10px); 任何长度值都可以使用calc()函数进行计算; calc()函数支持 "+", "-", "*", "/" 运算; calc()函数使用标准的数学运算优先级规则; 支持版本:CSS3 2.2 CSS var() 函数 var() 函数用于插入自定义的属性值,如果一个属性值在多处被使用,可以使用该方法。 支持版本:CSS3 语法 var(custom-property-name, value) 值
  • 使用 CLI 或任何其他方式将 C++ 库静态链接到 C# 进程(Statically linking a C++ library to a C# process using CLI or any other way)
    问题 是否可以采用用 C++ 编写的静态库,并以某种方式将其集成到 .NET 进程中,这样 .NET 进程将与 lib 集成到一个 exe 文件中? 我的意思是,我知道我可以从 C# 进程中调用 C++ DLL,但用户仍然必须拥有 C++ DLL,但是是否可以使用 lib 而不是 DLL?(这样用户就不会了)甚至不知道 exe 使用我的库)。 如果可能,如何? 回答1 在其他托管语言中,C++ 是独一无二的,它允许混合模式——托管 (C++/CLI) 和本机 C++ 在同一编译单元 (dll/exe/lib) 中的组合,以及来回调用。 也许你可以利用它,创建一种胶水层。 不过我从来没试过。 关键是 /clr 编译器开关 - 您将它应用于项目中的某些文件而不是其他文件。 然后您创建一些类/函数作为托管。 非托管位可以看到它们并调用它们,反之亦然。 传递原始类型是透明的,对于字符串有一些编组技巧。 我将能够在星期一发布更多信息。 编辑:似乎需要一些深奥的魔法。 不是在混合 C++ 端 - 在将结果链接到 C# 端。 您看,Visual Studio IDE 并不容易支持该方案。 很有可能,常规的构建过程没有任何用处。 EDIT2:您可以通过指定编译器的 /LN 命令行选项和链接器的 /NOASSEMBLY 将 C++ 位编译为 .netmodule。 现在,要将其链接到 C# exe
  • 混合模式库和 CRT 依赖项 - 帮助(Mixed Mode Library and CRT Dependencies - HELP)
    问题 好吧,在进行了大量研究并尝试了几乎所有我能找到的托管 CPP Redist 并尝试将我的 DLL 本地复制到应用程序的执行目录之后,我无法弄清楚我缺少这个混合模式库的哪些依赖项。 基本上我有一个大型 C# 应用程序,我正在尝试使用我制作的混合模式库。 在开发机器上它运行完美(当然)但是当需要加载库以使用它时部署它,因为缺少 CRT 依赖项(我假设)。 我已经使用dependency walker检查了所有引用的DLL并确保它们存在于部署机器上,但没有运气,我想知道是否有一些需要注册的依赖项我丢失了,但我不知道是什么. 当代码尝试从混合模式库实例化一个类时,我收到以下异常。 异常详细信息:System.IO.FileLoadException:无法加载文件或程序集“USADSI.MAPI,版本=1.0.3174.25238,Culture=neutral,PublicKeyToken=null”或其依赖项之一。 此应用程序无法启动,因为应用程序配置不正确。 重新安装应用程序可能会解决此问题。 (来自 HRESULT 的异常:0x800736B1) 我正在使用 VS2008 SP1 编译库并指定 /clr:oldSyntax。 中间清单如下所示: <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion=
  • 本机 C++ 通过代理 C++ 管理的 dll 使用 C# dll(Native C++ use C# dll via proxy C++ managed dll)
    问题 这相当复杂,所以请耐心等待。 我有一个用本机(仅限 Win32)C++ 编码的第 3 方程序(“目标”)。 作为目标设计的一部分,它实现了一个 dll 插件系统。 本机 DLL 放置在程序的“ext”目录中时,由目标加载。 然后,目标会根据需要调用每个 DLL 提供的四种方法(Initialize、SendHook、RecvHook、Terminate)。 正如您可能从函数名称中猜到的那样,加载项在目标中挂钩了某些函数。 我没有目标的源代码。 插件之一是旧的和马车 - 更不用说混乱和相当丑陋。 它是用 Delphi 编写的(当然,编译为 win32 DLL)。 在过去的几周里,我一直在增强插件并将其转换为 C#(我将其称为“扩展”)。 现在已经完成了,所以我把注意力转向了让目标加载扩展(它是作为类库构建的)。 显然,目标(本机 C++)不能直接加载扩展(托管 C#)。 因此,在研究它之后,似乎我只需要一个“代理”DLL(用 VC++ 编写,支持 CLR)来加载我的扩展,然后负责将方法调用从目标传递到扩展。 “简单的。” 对,没错。 我现在比一袋彩虹糖中的变色龙更困惑。 我已经看到了关于使用 COM 的东西,这绝对是我需要避免的,在性能和进程内存权限方面,因为扩展将调用一些方法(通过句柄传递给代理)。 此外,我还看到了有关 tlb 和 #import 指令的内容。
  • C# 程序如何使用任何版本的 C++ dll?(How can a C# program use a C++ dll of any version?)
    问题 我们正在创建一个用 C++ 编写的 dll,提供对某些硬件的访问。 我们还有一个使用这个 dll 的 C# 程序。 我们的版本有问题。 事实上,在运行 C# 程序时,它绝对想使用它在编译时使用的确切 C++ dll 版本。 即,如果 C# 程序是使用 C++ dll 1.2.3.4 编译的,那么程序将拒绝使用 C++ dll 1.2.3.5 运行。 我想指示 C# 程序使用任何版本为 1.2.anything 的 C++ dll。 我在哪里可以在 C# 项目中配置它? 这个问题已被那个问题取代,与 COM 更相关。 回答1 C++ 中不存在这种奇特的东西。 使用并排清单在技术上允许这样做,但您应该知道它,因为您会在 C# 程序的清单中键入版本号。 更有可能的解释是您实际上创建了一个 C++/CLI 程序集。 许多程序员将 C++/CLI 与 C++ 混淆。 容易出错,因为该语言允许使用本机 C++ 代码。 但它实际上被编译为混合模式程序集,该程序集包含 IL 和本机代码。 当 CLR 加载此类程序集时,会对此类程序集进行正常的 CLR 版本检查,它只对精确的版本匹配感到满意。 强大的 DLL Hell 对策。 并且可以使用正常的 CLR 版本整理选项来绕过此检查,即 app.exe.config 文件中的<bindingRedirect>元素。 以及以您为 C#
  • DataGrid的WinRT端口中出现神秘的“没有足够的配额来处理此命令”(Mysterious “Not enough quota is available to process this command” in WinRT port of DataGrid)
    问题 编辑9月26日 有关完整背景,请参见下文。 tl; dr:一个数据网格控件导致了异常异常,我正在寻求帮助,以找出原因并找到解决方案。 我进一步缩小了范围。 我已经能够在更小的测试应用程序中重现该行为,并且能够更可靠地触发不稳定的行为。 我绝对可以排除线程和(我认为)内存问题。 新应用程序不使用任何Tasks或其他线程/异步功能,并且我可以通过添加将常量返回给DataGrid中显示的对象类的属性来触发未处理的异常。 这向我表明问题出在未管理的资源耗尽或我尚未想到的问题上。 修改后的程序的结构如下。 我创建了一个名为EntityCollectionGridView的用户控件,该控件具有标签和数据网格。 在控件的Loaded事件处理程序中,我为具有1000或10000行的数据网格分配一个List<TestClass> ,让网格生成列。 在页面的OnNavigatedTo事件(或Loaded ,似乎无关紧要)中,在MainPage.xaml中将此用户控件实例化2-4次。 如果发生异常,则在显示MainPage之后立即发生。 有趣的是,该行为似乎并不随显示的行数而变化(它可以可靠地在10000行中工作,或者在每个网格中只有1000行时可靠地失败),而与所有网格中的总列数无关在给定的时间加载。 有20个要显示的属性,4个网格可以正常工作。 具有35个属性和4个网格,将引发异常。 但是
  • C# 无法加载文件或程序集“Microsoft.SharePoint.Library”(C# Could not load file or assembly 'Microsoft.SharePoint.Library')
    问题 我正在 64 位版本的 Windows 7 上开发,运行 MOSS (SharePoint),这是我的开发机器。 现在,当我将 Web 服务应用程序部署到测试服务器 Windows 2003 32 位(未安装 Sharepoint)时,出现此错误。 无法加载文件或程序集“Microsoft.SharePoint.Library,版本=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c”或其依赖项之一。 该系统找不到指定的文件 DLL 已明确复制到 bin 目录 (Microsoft.Sharepoint.dll)。 有任何想法吗? 回答1 如果您使用的是 sharepoint dll,它只能在安装了 sharepoint 的机器上运行。 即使你设法破解它并让它工作,你也可能会违反许可协议。 回答2 有一种方法可以在 Windows XP、Vista 或 Seven 的开发控制台中加载 Sharepoint 库。 请参阅此处:http://fernandof.wordpress.com/2008/02/11/how-to-install-the-sharepoint-2007-vs-2005-extensions-on-a-workstation/ [O]打开regedit并创建以下键和​​字符串值: [HKEY
  • Win 7 DllImport C# 奇怪错误,对内存位置的访问无效?(Win 7 DllImport C# Odd error, Invalid access to memory location?)
    问题 我正在使用 DllImport 从我的 C# 应用程序访问 C++ dll 中的一些函数。 这段代码在我的开发笔记本电脑上运行良好,它是 Windows 7 64 位,dll 本身是 32 位,所以我在 32 位运行托管 dll 的进程,它运行良好。 但是,当我尝试在目标机器上运行完全相同的进程时,同样是 Windows 7 64bit Ultimate,我收到错误“对内存位置的访问无效”。 从过程。 我不确定问题是什么,我查看了网络上的大量资源,但没有一个为我解决了这个问题。 我不明白为什么它在我的开发箱上工作正常,但在目标上却没有? dll 本身很好,dll 附带的示例在我的目标框上都可以正常工作(这是执行 DllImport 的 C# 应用程序)。 有没有其他人有这个问题? 已经打了两天了! 异常: {"Unable to load DLL 'CLEyeMulticam.dll': Invalid access to memory location. (Exception from HRESULT: 0x800703E6)"} 回答1 由于未解析的依赖关系,DLL 加载可能会崩溃,因此使用 Dependency Walker 在目标机器上打开您的 DLL,看看是否有任何问题。 回答2 我注意到你的开发机器和你的目标机器之间的一大区别,即开发环境。
  • 如何从本机C ++调用C#库(使用C ++ \ CLI和IJW)(How to call a C# library from Native C++ (using C++\CLI and IJW))
    问题 背景:作为较大任务的一部分,我需要使非托管C ++和C代码可以访问C#库。 为了自己回答这个问题,我过去几天/几周一直在学习C ++ / CLI。 从不受管理的C ++和C中使用C#dll似乎有许多不同的方法。简要地讲,一些答案似乎是:使用Interlope服务,使用.com。 然后使用PInvoke(似乎仅从C#到C ++)并在C ++ / CLR中使用IJW(这似乎是Interlope服务)。 我认为最好建立一个可能是CLR包装器的库,该库使用IJW代表本机C ++和C代码调用C#dll。 细节:我需要将字符串以及int的值从c ++代码传递到C#dll,然后返回void。 相关性:许多公司有很多借口来混合和匹配C ++,C和C#。 性能:非托管代码通常更快,接口:托管人员也告诉我们,托管接口通常更易于维护,部署,并且通常更易于使用。 旧版代码也迫使我们。 在那里(就像我们爬过的山一样)。 虽然有很多关于如何从C#调用C ++库的示例。 通过Googling很难找到如何从C ++代码调用C#库的示例,特别是如果您想查看更新的4.0+代码。 软体: C#,C ++ / CLR,C ++,C,Visual Studio 2010和.NET 4.0 问题详细信息:可以分为多个部分: 使用com对象有优势吗? 还是PInvoke? 还是其他方法? (尽管我确实在Google
  • Visual Studio C# - 找不到 SQLite.Interop.dll(Visual Studio C# - SQLite.Interop.dll not found)
    问题 我目前正在尝试使用 Visual Studio 创建一个使用 SQLite 的 C# 应用程序。 我使用 NuGet 为我的程序安装了 SQLite,解决方案资源管理器中出现了三个引用(System.Data.SQLite、System.Data.SQLite.EF6、System.Data.SQLite.Linq)。 当我在 VS 中执行我的应用程序时,一切正常。 但是,每当我发布它(使用 ClickOnce)并尝试运行该应用程序时,它都会崩溃并显示以下错误: System.DllNotFoundException :无法加载 DLL 'SQLite.Interop.dll':找不到指定的模块(来自 HRESULT 的异常: 0x8007007E) 经过一番研究,我在 Debug 文件夹中找到了这个 dll 并将其复制到我的程序的“.exe”版本创建的文件夹中(在发布并执行“setup.exe”之后)。 这样,应用程序运行良好。 但我对这个解决方案并不满意,因为它看起来很脏。 我不希望未来的用户在安装我的应用程序时必须手动执行此操作! 因此,我的问题是:我该怎么做才能确保此 dll 与我的程序一起安装? 注意:我尝试了这篇文章的第一个答案:无法加载 dll sqlite interop dll WPF 但我似乎不适合我。 回答1 请参阅 https://system
  • ASP.Net无法创建/阴影副本(ASP.Net cannot create/shadow copy)
    问题 开发ASP.Net应用程序时,反复出现此错误: Cannot create/shadow copy 'XXXXX' when that file already exists 其中XXXXX是随机DLL。 通常,DLL是Microsoft企业库中的DLL之一,但它有所不同。 这确实是随机的,而且非常令人沮丧。 我会花几个小时而不会收到错误,然后每10-20分钟收到一次此错误。 我已经看到了几种解决方案。 例如,这个问题。 我尝试使用“清洁解决方案”选项,并且还只是重新启动了本地IIS。 但是,它仍然以相同的随机但持续的频率发生。 我也看到很多人提到在配置文件中使用此选项: <hostingEnvironment shadowCopyBinAssemblies="false" /> 但是,其他人则提到它存在问题,因此绝对不应在生产中使用它。 因此,我应该放弃并尝试shadowCopyBinAssemblies选项吗? (并确保不要将此更改复制到其他环境。)我是唯一经常收到此问题的人吗? 注意:我正在使用Visual Studio 2008。 回答1 以下解决方法来自此现已失效的连接问题: 将<hostingEnvironment shadowCopyBinAssemblies="false" />到web.config文件的<system.web>部分。 遇到问题时
  • 从C ++调用C#代码(Calling C# code from C++)
    问题 我需要能够从C ++调用任意C#函数。 http://www.infoq.com/articles/in-process-java-net-integration建议使用ICLRRuntimeHost :: ExecuteInDefaultAppDomain(),但这仅允许我调用具有以下格式的int method(string arg) : int method(string arg) 调用任意C#函数的最佳方法是什么? 回答1 使用/ clr标志编译您的C ++代码。 这样,您可以相对轻松地调用任何.NET代码。 例如: #include <tchar.h> #include <stdio.h> int _tmain(int argc, _TCHAR* argv[]) { System::DateTime now = System::DateTime::Now; printf("%d:%d:%d\n", now.Hour, now.Minute, now.Second); return 0; } 这算作“ C ++”吗? 好吧,这显然不是标准C ++ ... 回答2 C ++应用程序有几种方法可以调用C#DLL中的函数。 使用C ++ / CLI作为中间DLL http://blogs.microsoft.co.il/sasha/2008/02/16/net-to-c
  • C#与C++混合编程及性能分析
    概要:  众所周知,用C#做界面比C++开发效率要高得多,但在有性能问题的情况下不得不将部分模块使用C++,这时就需要使用C#与C++混合编程。本文给出了两种混合编程的方法以及性能对比。开发环境: I5-8400 CPU 2.8G 8G,Win10 64Bit,VS2017(C++开发设置),C++,C#都采用x32平台,性能验证使用Release版本。测试纯C++项目性能:  1. 新建空解决方案:文件|新建|项目|已安装|模板|其他项目类型|Visual Studio解决方案|空白解决方案  2. 新建C++项目:右击解决方案|添加|新建项目|已安装|Visual C++|Win32控制台程序,按缺省设置生成项目  3. 在配置管理器中新建x32平台,删除其他平台  4. 新建CppFunction,并添加测试代码,完整代码如下,程序结果:Result: 1733793664 Elapsed:65// CppFunction.h#pragma onceclass CppFunction{public: CppFunction(){} ~CppFunction(){} int TestFunc(int a, int b);};// CppFunction.cpp#include "stdafx.h"#include "CppFunction.h"class CCalc
  • 参加数十次校招后,我做了以下总结(游戏开发岗)
    参加数十次校招笔试面试后,我做了全面的总结(游戏开发岗) 前言基础知识编程基础面试题总结 数据结构与算法操作系统计算机网络数据库设计模式游戏引擎基础计算机图形学坐标变换相机的正交投影和透视投影mipmap抗锯齿 光照与阴影阴影 渲染管线渲染管线的概念渲染管线流程渲染管线几个阶段 游戏常见优化策略工具使用经验 简历实习经历笔试与面试笔试与面试过程及技巧求职的几个阶段学完这些知识,我用了多久注意事项关于我 前言 本文主要用来介绍自己大学期间总结出来的面试经验及面试技巧,面向游戏客户端和游戏引擎开发岗位,原因在于,我很少看到与游戏岗位相关的面试经验总结,因此希望本次自己的经验能为那些想要进入游戏行业的新人提供或多或少的帮助 有关我的大学生活和大学四年经历总结,请看:从超级大白到游戏引擎开发工程师,我经历了什么 废话不说,直奔主题。 基础知识 其实个人觉得,对于应届毕业生,在求职的过程中,企业重点考察的还是基础知识,即便是算法岗位,只要把握好基础,再加上常刷算法题,拿到offer也并不是难事。因此,本文将重点介绍进入游戏行业所需的基础知识。 编程基础 身为计算机专业出身的话,一般情况下都会有语言基础,包括C.C++,C#,Java等,在笔试和面试的过程中,求职者可以自由选择自己最擅长的语言编程,而且面试官在面试前还会问你最擅长的语言是什么,因此只要你能熟悉一门语言,就有了笔试和面试的资本
  • iOS面试题,性能优化篇!
    1.形成tableView卡顿的缘由有哪些?1.最经常使用的就是cell的重用, 注册重用标识符若是不重用cell时,每当一个cell显示到屏幕上时,就会从新建立一个新的cellhtml若是有不少数据的时候,就会堆积不少cell。ios若是重用cell,为cell建立一个ID,每当须要显示cell 的时候,都会先去缓冲池中寻找可循环利用的cell,若是没有再从新建立cellc++2.避免cell的从新布局cell的布局填充等操做 比较耗时,通常建立时就布局好面试如能够将cell单独放到一个自定义类,初始化时就布局好swift3.提早计算并缓存cell的属性及内容当咱们建立cell的数据源方法时,编译器并非先建立cell 再定cell的高度xcode而是先根据内容一次肯定每个cell的高度,高度肯定后,再建立要显示的cell,滚动时,每当cell进入凭虚都会计算高度,提早估算高度告诉编译器,编译器知道高度后,紧接着就会建立cell,这时再调用高度的具体计算方法,这样能够方式浪费时间去计算显示之外的cell缓存4.减小cell中控件的数量尽可能使cell得布局大体相同,不一样风格的cell可使用不用的重用标识符,初始化时添加控件,网络不适用的能够先隐藏数据结构5.不要使用ClearColor,无背景色,透明度也不要设置为0渲染耗时比较长多线程6.使用局部更新若是只是更新某组的话