问题标签 [mixed-mode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++-cli - 为什么程序集加载器没有在 GAC 中检查 C++/CLI 混合模式程序集?
我有一个引用 C++/CLI 混合模式程序集的 C# 项目。该程序集存储在 PATH 的文件夹中,并且它也存在于 GAC 中,但是当它执行时,我得到:
System.IO.FileNotFoundException:无法加载文件或程序集“PcsSocketCommunications500,版本=0.0.0.0,文化=中性,PublicKeyToken=null”
版本 0.0.0.0 是因为 C++/CLI 没有 Assembly 版本类,但据我所知,这应该不是问题。
运行进程监视器我已经看到系统只是在与主进程相同的文件夹中查找程序集......我不是程序集加载专家,但我希望至少看到一些 GAC 搜索和“也许”一些PATH 搜索.. 这就是我得到的(PcsSocketCommunication500.dll 是 C++/CLI 程序集,黑色是工作目录):
关于加载程序为什么不检查 GAC 或 PATH 的任何想法?
c# - 任何 cpu 和 x64 之间的托管代码引用
我有一个混合模式 C++/CLI 项目,它被编译为 x86 和 x64 冻结 dll。
我有一个 C# 应用程序需要使用这个编译为“任何 CPU”的项目。如何从 c# 应用程序中正确引用正确的 dll?如果我右键单击添加引用,我必须只选择 2 个 dll 中的 1 个。
我的“ANY CPU”C# 应用程序有时会作为 x64 运行,有时会作为 x86 进程运行。
我听说你可以通过智能配置文件来做到这一点。
pointers - 将非托管指针传递给 C++/CLI 中托管类中的非托管对象
让我们假设以下情况:
和
我想将指向在 C++/CLI 代码中分配(并填充)的 std::vector 的指针传递给非托管 C++。如果我只是简单地写a->AnotherMethod(b)
,那么向量在非托管代码中是空的(例如 C++/CLI 中的 4 个元素和传递给a
.
这样做的正确方法是什么?
visual-studio-2010 - 在 VS2010 中添加从原生 C++ DLL 到 C++/CLI DLL 的引用不会将导入库添加到链接器命令行?
我有一个有点奇怪的问题,我似乎无法深入了解。我们有一个主要是非托管的 C++ 应用程序,它已经存在了一段时间,因此使用许多不同版本的 Visual Studio 构建,并定期更新到当前版本的 Visual Studio。
我现在遇到了以下问题:
- 在 VS2010 中,我在现有解决方案中添加了两个新项目。这两个新项目都是 DLL,一个是用普通的非托管 C++ 构建的,它是使用 C++ 和 C++/CLI 的混合构建的,因此是用 CLR 支持 (/clr) 构建的。第二个 C++/CLI DLL 应该由系统的其他几个组件使用
- 使用属性 -> 通用属性 -> 框架和引用,我将两个新的 DLL 作为依赖项添加到第三个 DLL。第三个 DLL 对 .NET 一无所知,并且是在纯本机、非托管 C++ 中实现的。新的 DLL 在依赖项设置中正确显示,并且新的引用在解决方案的构建顺序受到影响(正确)的意义上起作用,但由于某种原因,仅将普通本机 C++ DLL 的导入库添加到引用这两个库的 DLL 的链接器命令行。第二个,混合库生成一个导入库,但是 VS2010 没有将导入库添加到链接器命令行,这可以预见会导致几个未解析的外部符号。
- 似乎触发此行为的一个设置是构建具有公共语言运行时支持的 DLL,因为库的所有其他设置都是相同的。
我目前有解决此问题的方法-我只是将导入库添加为手动依赖项-但我想知道是否有人遇到过此问题,以及是否有办法在没有解决方法的情况下使此功能按预期工作?
.net - 在混合模式程序集中使用签名中的非托管类型导出方法
我有一个混合模式程序集,使用该/clr
选项构建。我正在尝试从中导出一个类,以供另一个混合模式程序集使用,该程序集也使用该/clr
选项构建。
我的问题是该方法的签名包含托管和非托管类型的混合。例如:
最初,我尝试__declspec(dllexport)
在实现这个的非引用类上使用。这失败并出现错误C3395: __declspec(dllexport) cannot be applied to a function with the __clrcall calling convention,大概是因为签名中的托管类型。我的下一个想法是将ref
课程改为课程。现在程序集构建并反射器显示导出的方法,如下所示:
但是,在客户端程序集中,我无法引用导出的方法...
...产生错误C2039: 'Convert' : is not a member of 'XXX::AtlCStringConverter'。我已经检查了明显的错误,例如混合可能导致签名不匹配的不同字符类型。
我意识到这些导出尝试都不是真正的犹太教,因为托管/非托管类型的混合在签名中并排公开,但是由于托管/非托管的这种混合在混合模式程序集中很好,我想知道是否有没有办法在混合模式 DLL 之间的签名中使用这种混合类型来导出类型吗?
visual-c++ - 将本机 c++ 类导入 CLI 项目
我正在创建一个 CLI 项目以包装现有的本机 c++ 项目(同一解决方案文件中的两个独立项目)。我想在托管类中包含一个指向本机类的指针作为成员。从我在线阅读的文档中,如果托管代码和非托管代码都在同一个项目中,则可以这样做。如果本机代码和托管代码位于不同的项目中,那么唯一的选择是在两个项目之间使用 dllimport 和 dllexport 属性,并将本机代码类函数导出为静态函数。
这些是我唯一的选择,还是我可以在两个单独的项目之间导入和导出整个原生类?我问是因为这决定了我如何设计托管包装器。提前致谢。
visual-c++ - 如何从 'cli::array 转换^' 到 'CDWordArray &'
我的 MFC 代码有一个功能:
我通过另一个 CPP 项目来调用它,如下所示:
但我得到错误
visual-studio-2010 - C++/CLI 混合模式调试挂起(经常)
在使用本机应用程序在混合模式 C++/CLI 中调试时,我遇到了进程挂起问题。这是无法忍受的,我调试的几乎 70% 都会发生这种情况,我需要一次又一次地重新启动该过程。
是否有任何修补程序或解决方案?
apache - IE 7 和 IE 8 中的 HTTPS 和 HTTP 混合内容
我有一个应用程序,我希望主要基于 ssl,但允许 http 链接在 IE7 和 IE8 的 https 页面上共存。当我放置混合内容(在 https 服务页面上嵌入 http 链接)时,我会收到来自 IE 的混合内容警告。有没有办法解决?我们正在使用安全证书,某些证书是否处理混合内容?Firefox 和 Chrome 不会抛出任何错误……有什么想法吗?
.net-4.0 - .net 4 调试 api 在被调试者中导致访问冲突
.net 4调试api有什么办法可以在启动过程中以某种方式破坏应用程序的状态?
我遇到的问题如下:
- 如果我使用 .net 调试 api(visual studio 2010,sharp develop 4,mdbg)从调试器中启动我的应用程序,我会遇到各种随机访问违规。
- 如果我从不使用 .net 调试 api(delphi 2007,带有 sos 扩展名的 windbg)的调试器中启动我的应用程序,一切正常。
- 如果我直接启动我的应用程序,然后在其上附加一个调试器(如 Visual Studio 2010、Sharp Develop 4、mdbg、delphi 2007、windbg),一切正常。
- 如果我回到 .net 3.5 和 clr 2.0,我完全没有问题。
那么托管调试 api 中从 .net 3.5 到 4.0 的哪些变化导致我的应用程序在启动时引发访问冲突?
该应用程序是用 delphi(非托管)和 c#(托管)编写的,使用托管 vcl进行互操作。
我很难举出任何例子来重现这个问题,所以我知道回答这个问题可能是不可能的,但如果有人对调试 api 有更深入的了解,可以给我一个正确方向的提示,或者可以帮助我缩小范围会很感激的。