首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C#程序如何使用任何版本的C++动态链接库?

C#程序如何使用任何版本的C++动态链接库?
EN

Stack Overflow用户
提问于 2013-07-11 07:59:22
回答 3查看 348关注 0票数 6

我们正在创建一个用C++编写的动态链接库,提供对一些硬件的访问。我们还有一个使用这个dll的C#程序。

我们的版本出了点问题。实际上,在运行C#程序时,它绝对希望使用它在编译时使用的确切的C++ dll版本。也就是说,如果C#程序是使用C++动态链接库1.2.3.4编译的,那么该程序将拒绝使用C++动态链接库1.2.3.5运行。

我想指示C#程序使用任何1.2版的C++动态链接库。

我可以在C#项目中的什么地方配置它?

这个问题已经被that one取代了,它更多地与COM有关。

EN

回答 3

Stack Overflow用户

发布于 2013-07-11 09:07:56

在C++中不存在这种奇特的东西。使用并列清单在技术上允许这样做,但是您应该知道这一点,因为您已经在C#程序的清单中键入了版本号。

更有可能的解释是,您实际上创建了一个C++/CLI程序集。许多程序员将C++/CLI与C++混淆。由于该语言允许使用本机C++代码,因此很容易出错。但它实际上被编译成一个混合模式的程序集,一个同时包含IL和本机代码的程序集。当CLR加载这样的程序集时,将对该程序集进行常规的CLR版本检查,它只对精确的版本匹配感到满意。一个强大的DLL地狱反制措施。

普通的CLR version wrangling选项可以绕过这个检查,它是app.exe.config文件中的一个<bindingRedirect>元素。以及控制程序集版本号的方式,就像您对C#代码所做的那样,所以这是不必要的。

检查此猜测是否准确的最简单方法是使用Project + Add Reference并选择DLL。如果这没有引起任何抱怨,并且程序集被添加到您的C#项目的References节点,那么您就知道它是一个普通的.NET程序集。别忘了利用这一点,不需要pinvoke。

票数 3
EN

Stack Overflow用户

发布于 2013-07-11 08:12:19

在运行时加载dll,并使用反射调用它的方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Assembly assembly = Assembly.LoadFrom("C:\\test.dll");

Assembly.GetTypes();

Activator.CreateInstance(type);
票数 1
EN

Stack Overflow用户

发布于 2013-07-11 08:30:58

我认为不可能将您的程序配置为使用1.2.*版本而不使用其他版本。除非你自己写代码。另一种可能是不更改C++动态链接库的版本标记,但您似乎并不想这样做。

避免版本依赖的一种解决方案是使用dllimport。你可以用它加载任何用C++编写的动态链接库。它不依赖于版本。请参阅msdn中的示例,并在末尾提供链接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System;
using System.Runtime.InteropServices;

class Example
{
 // Use DllImport to import the Win32 MessageBox function.
 [DllImport("user32.dll", CharSet = CharSet.Unicode)]
 public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

 static void Main()
 {
     // Call the MessageBox function using platform invoke.
    MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
 }

}

Description in MSDN

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17588029

复制
相关文章
为亚马逊S3提供SFTP连接
Amazon S3或Simple Storage Service,是一种低成本、基于云的对象存储服务,它通过合理的、按需付费的定价为用户提供几乎无限的存储空间。S3存储的经济性、可用性和灵活性的特点,使组织依赖S3来处理您可以想象的,从时间点备份到业务数据备份以及介于两者之间的所有内容的存储。
知行软件EDI
2021/07/23
1.7K0
保护 Amazon S3 中托管数据的 10 个技巧
在这篇文章中,我们将讨论 10 个良好的安全实践,这些实践将使我们能够正确管理我们的 S3 存储桶。
Khan安全团队
2022/01/18
1.5K0
certbot开启亚马逊EC2主机https
国内那么多云主机运营商, 你为何要买国外的主机呢, 你肯定在干些见不得人的勾当..
chuchur
2022/10/25
5080
基于Windows服务实现的亚马逊云S3文件上传
一、Amazon S3介绍 Amazon Simple Storage Service (Amazon S3) 是一种对象存储,它具有简单的 Web 服务界面,可用于存储和检索 Web 上任何位置、任意数量的数据。它能够提供 99.999999999% 的持久性,并且可以在全球大规模传递数万亿对象。 客户将 S3 用于批量存储库、“数据湖”,用于分析、备份和还原、灾难恢复和无服务器计算。许多原生云应用程序甚至使用 S3 作为主要存储。 借助 Amazon 的云数据迁移选项,客户可将大量数据轻松地移入或
跟着阿笨一起玩NET
2021/02/02
1.2K0
如何使用亚马逊对象存储AWS S3 SDK访问腾讯云存储COS
COS 提供了 AWS S3 兼容的 API,因此当您的数据从 S3 迁移到 COS 之后,只需要进行简单的配置修改,即可让您的客户端应用轻松兼容 COS 服务。本文主要介绍不同开发平台的 S3 SDK 的适配步骤。在完成添加适配步骤后,您就可以使用 S3 SDK 的接口来访问 COS 上的文件了。
云存储
2020/05/26
4.3K0
等级保护主机安全:CentOS入侵防范(一)
本篇文章主要想说一说我对入侵防范中前3个测评项的理解(对于centos系统而言),如果大家有其他的看法或者思路也可以在回复中提出,我也跟着学习学习。
FB客服
2019/09/17
1.3K0
等级保护主机安全:CentOS入侵防范(一)
在兼容亚马逊S3的第三方应用中使用COS的通用配置
Amazon Simple Storage Service(Amazon S3,下文简称 S3)是 AWS 最早推出的云服务之一,经过多年的发展,S3 协议在对象存储行业事实上已经成为标准。腾讯云对象存储 COS(下文简称 COS)提供了兼容 S3 的实现方案,因此您可以在大部分兼容 S3 应用中直接使用 COS 服务。本文将重点介绍如何将此类应用配置为使用 COS 服务。
云存储
2020/04/03
3.3K0
在兼容亚马逊S3的第三方应用中使用COS的通用配置
借助亚马逊S3和RapidMiner将机器学习应用到文本挖掘
本挖掘典型地运用了机器学习技术,例如聚类,分类,关联规则,和预测建模。这些技术揭示潜在内容中的意义和关系。文本发掘应用于诸如竞争情报,生命科学,客户呼声,媒体和出版,法律和税收,法律实施,情感分析和趋势识别。 在本篇博客帖中,你将会学习到如何将机器学习技术应用到文本挖掘中。我将会向你展示如何使用RapidMiner(一款流行的预测分析开源工具)和亚马逊S3业务来创建一个文件挖掘应用。亚马逊S3业务是一项易用的存储服务,可使组织在网页上的任何地方存储和检索任意数量的数据。 掘模型产生的结果可以得到持续的推导并
用户1737318
2018/06/05
2.6K0
使用新的存储文件跟踪功能解锁 S3 上的 HBase
CDP 运营数据库 (COD)是由 Apache HBase 和 Apache Phoenix 提供支持的实时自动扩展运营数据库。它是在 Cloudera 数据平台 (CDP) 公共云上运行的主要数据服务之一。您可以从CDP 控制台访问 COD 。
大数据杂货铺
2022/12/02
2K0
使用新的存储文件跟踪功能解锁 S3 上的 HBase
攻击本地主机漏洞(上)
翻译“CompTIA PenTest Certification All-in-One Exam Guide Exam2019.pdf” 第十章
顾翔
2022/09/23
1.2K0
攻击本地主机漏洞(上)
C#-clickonce部署和调用
ClickOnce 是一种部署技术,使用它可以用来进行应用程序的自动更新,也可以使用在浏览器中直接调用部署好的应用程序。
kdyonly
2023/03/03
5780
文件上传(三)基于windows主机的上上传
看看上面的代码都限制了多少吧,大小写,加空格,加字符串,黑名单,好多限制。。。。。
逍遥子大表哥
2021/12/17
1.8K0
文件上传(三)基于windows主机的上上传
如何在Ubuntu 18.04上保护Redis的安装
Redis是一个使用内存技术,NoSQL,键值缓存及存储,也可以保存到磁盘。它专为受信任环境中的受信任客户端设计,自身没有强大安全功能。这里是Redis官方网站的引用:
GeekZ
2018/08/07
1K0
【以太坊篇】-‘链上数据的隐私保护’
好了,今天分享的是关于区块链外行人或者半内行人最关心的一个问题-“关于链上数据的隐私保护问题”。
帆说区块链
2022/04/26
7870
【以太坊篇】-‘链上数据的隐私保护’
快速创建软件安装包-ClickOnce
今天介绍使用ClickOnce制作软件安装包,首先我们先了解什么是ClickOne。
沙漠尽头的狼
2022/11/25
1.2K0
快速创建软件安装包-ClickOnce
怎么在区块链上保护隐私?
编者按:在12月3日的亚太区以太坊培训和交流Meetup深圳站上,Vitalik作了《怎么在区块链上保护隐私》的演讲,谈到了区块链上四种主要的保护隐私的手段,包括环签名和零知识证明。来看看吧。 作者:Vitalik
企鹅号小编
2017/12/26
2.3K0
怎么在区块链上保护隐私?
如何在Ubuntu 14.04上保护Nginx
即使使用默认设置,Nginx也是一个非常安全可靠的Web服务器。但是,有很多方法可以进一步保护Nginx。
编程男孩
2018/10/15
1.6K0
快速创建软件安装包-ClickOnce
今天介绍使用ClickOnce制作软件安装包,首先我们先了解什么是ClickOne。
沙漠尽头的狼
2022/11/03
9730
快速创建软件安装包-ClickOnce
SuSE Linux上修改主机名
临时修改使用hostname即可,格式为:hostname 新主机名。Hostname命令除可以临时修改主机名外,还可以用它来查看主机名,不带参数执行它,即为查看主机名。
一见
2018/08/10
6.9K0
如何使用Ubuntu 16.04上的Let's Encrypt保护Apache
本教程将向您展示如何在运行Apache作为Web服务器的Ubuntu 16.04服务器上设置Let's Encrypt的TLS / SSL证书。
新巴子
2018/10/19
1.9K0

相似问题

如何比较口语和参考录音-语言学习

23

语言学习语音识别工具

10

Pocketsphinx无法准确识别印度语言单词

112

用机器学习识别python中的声音(单词)

12

机器学习识别句子中的重要单词

118
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文